简介
Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务
很多大型网站都在使用nginx和Tengine
高性能原因:
-
采用IO多路复用epoll模型
-
CPU亲和
把每个进程固定在一个cpu核心上执行,进行绑定,减少切换cpu的开销,获得更好性能
-
sendfile
直接通过内核空间传输静态文件,高效的处理静态文件
2022/5/31大约 3 分钟
Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务
很多大型网站都在使用nginx和Tengine
高性能原因:
采用IO多路复用epoll模型
CPU亲和
把每个进程固定在一个cpu核心上执行,进行绑定,减少切换cpu的开销,获得更好性能
sendfile
直接通过内核空间传输静态文件,高效的处理静态文件
# nginx服务使用的用户
user nginx;
# 工作进程数,一般和cpu核心数保持一致
worker_processes 1;
# nginx的错误日志路径
error_log /var/log/nginx/error.log warn;
# nginx服务启动的pid存放路径
pid /var/run/nginx.pid;
# 事件模块,配置内核模型
events {
worker_connections 1024; #每个进程允许最大连接数,一般调到10000左右就行
}
# http协议中间件配置
http {
include /etc/nginx/mime.types; # content-type配置
default_type application/octet-stream;
# 日志类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 访问日志路径
access_log /var/log/nginx/access.log main;
# 开启sendfile功能
sendfile on;
#tcp_nopush on;
# 设置客户端超时时间
keepalive_timeout 65;
#gzip on;
# 最后会读这些配置
include /etc/nginx/conf.d/*.conf;
}
HTTP请求变量
$http_user_agent# >>> vim /etc/nginx/nginx.conf
# nginx的错误日志路径
error_log /var/log/nginx/error.log warn;
# ...
http {
# 定义日志类型'main'
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 使用'main'格式记录日志
access_log /var/log/nginx/access.log main;
}
Nginx官方模块
第三方模块
在使用nginx -V命令时,显示的--with-*开头的是编译的模块
用户展示客户端连接的状态,用于监控当前连接信息
# >>> vim /etc/nginx/conf.d/default.conf
# 该模块需要在 server或location下配置
server {
#...
location /mystatus {
stub_status;
}
}
# 通过访问url /mystatus可以得到当前链接数
安装:yum install httpd-tools
使用:
ab -n 2000 -c 2 http://127.0.0.1
# -n 总请求数
# -c 并发数
# -k 是否开启长连接
yum install php php-mysql php-fpm
vim /etc/php.ini
cgi.fix_pathinfo=0
**注意:**使用http_proxy模块代理http协议,暂时不能支持HTTPS代理
语法:proxy_pass URL;
该语法在location、if in location、limit_except下配置
URL写法:
http://localhost:8000/uri/
https://192.168.1.1:8000/uri/
http://unix:/tmp/backend.socket:/uri/;
语法: limit_conn_zone key zone=name:size; 解释:申请限制连接的区域 限制的键 申请的区域名:区域大小; 该语法在http下配置
语法:limit_conn zone_name number; 解释:限制连接 申请过的区域名字 并发数量限制 该语法在http、server、location下配置
# >>> vim /etc/nginx/conf.d/default.conf
# 对客户端IP地址进行连接限制
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;
server {
#...
location / {
root /usr/share/nginx/html;
# 限制客户端同一时刻只允许一个IP连接过来
limit_conn conn_zone 1;
index index.html index.htm;
}
}
非服务器动态运行生成的文件:
| 类型 | 种类 |
|---|---|
| 浏览器端渲染 | HTML、CSS、JS |
| 图片 | JPEG、GIF、PNG |
| 视频 | FLV、MPEG |
| 文件 | TXT、任意下载文件 |
静态资源服务场景-CDN(内容分发网络):
| 反向代理模式 | Nginx配置模块 |
|---|---|
| http、websocket、https | ngx_http_proxy_module |
| fastcgi | ngx_http_fastcgi_module |
| uwsgi | ngx_http_uwsgi_module |
| grpc | ngx_http_v2_module |