Nginx 配置
一、全局块(最外层,不属于任何 {})
作用:配置 Nginx 主进程全局运行参数,生效于所有模块。
1. user
user nginx nginx;
- 作用:指定 Nginx 工作进程运行身份(用户/用户组)
- 格式:
user 用户名 [组名]; - 说明:
- 默认部分系统为
nobody,生产建议单独创建nginx用户 - 若设
root有安全风险,不推荐 - 目录/文件权限要和该用户匹配,否则出现 403
2. worker_processes
worker_processes auto;
# worker_processes 4;
- 作用:设置 Nginx 工作进程数量
- 取值:
- 数字:手动指定进程数
auto:自动匹配 CPU 核心数(推荐)- 原理:Nginx 是多进程模型,一个进程绑定一个CPU核心,充分利用多核性能。
3. error_log
error_log /var/log/nginx/error.log warn;
- 作用:指定错误日志路径 + 日志级别
- 格式:
error_log 日志路径 级别; - 日志级别(从低到高):
debug | info | notice | warn | error | crit - 常用:
warn/error,生产关闭 debug 减少日志量。
4. pid
pid /var/run/nginx.pid;
- 作用:指定 Nginx 主进程 PID 文件存放路径
- 用途:
nginx -s reload/stop、systemd 管理时依赖该文件识别进程。
5. worker_rlimit_nofile
worker_rlimit_nofile 65535;
- 作用:单个 worker 进程最大可打开文件句柄数
- 场景:高并发、大量连接/静态文件场景,突破系统默认限制
- 建议值:
65535
二、events {} 块
作用:配置网络连接、IO模型、并发相关参数,控制客户端连接行为。
1. use
use epoll;
- 作用:指定 Linux IO多路复用模型
- 系统对应:
- Linux 2.6+:
epoll(性能最优,必用) - Windows:
select - 高并发核心优化项。
2. worker_connections
worker_connections 65535;
- 作用:单个 worker 进程最大并发连接数
- 总并发上限 ≈
worker_processes × worker_connections - 注意:包含客户端连接、反向代理后端连接,不是纯用户数。
3. multi_accept
multi_accept on;
- 作用:开启后,worker 进程一次性接收所有新到达连接
on:提升并发接收效率;off:逐个接收。
三、http {} 块
作用:全局 HTTP 服务配置,所有 server 虚拟主机继承此处配置,是使用最多的块。
1. include
include mime.types;
include /etc/nginx/conf.d/*.conf;
- 作用:引入外部配置文件,实现配置拆分、解耦
- 支持通配符
*,主流用法:把不同站点拆到conf.d/目录。
2. default_type
default_type application/octet-stream;
- 作用:设置默认 MIME 类型
- 含义:当文件类型未匹配到
mime.types时,当作二进制流下载 - 常用场景:未知文件直接触发下载。
3. log_format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
- 作用:自定义访问日志格式,命名为
main - 内置变量说明:
$remote_addr:客户端IP$remote_user:登录用户名(基本为空)$time_local:服务器本地时间$request:请求方法+URI+协议$status:HTTP状态码$body_bytes_sent:响应字节数$http_referer:来路页面$http_user_agent:客户端浏览器/设备标识$http_x_forwarded_for:代理转发后的真实IP
4. access_log
access_log /var/log/nginx/access.log main;
- 作用:指定访问日志路径,并使用上面定义的
log_format格式 - 可在
server/location单独覆盖,实现分站点日志。
5. sendfile
sendfile on;
- 作用:开启 Linux
sendfile()零拷贝文件传输 - 优化:静态文件、大文件传输大幅降低CPU消耗,生产必开。
6. tcp_nopush / tcp_nodelay
tcp_nopush on;
tcp_nodelay on;
tcp_nopush:配合 sendfile,减少网络小包,提升吞吐tcp_nodelay:关闭TCP延迟发送,提升响应速度- 静态站点、接口服务一般同时开启。
7. keepalive_timeout
keepalive_timeout 60;
- 作用:HTTP长连接超时时间(单位:秒)
- 含义:客户端完成请求后,连接保留多久,复用连接减少握手开销。
8. keepalive_requests
keepalive_requests 100;
- 作用:单个长连接最大请求次数,到达上限强制断开。
9. gzip 系列(压缩)
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript;
gzip_vary on;
gzip on:开启Gzip压缩gzip_min_length:仅压缩大于该大小的文件(避免小文件压缩得不偿失)gzip_types:指定要压缩的文件MIME类型gzip_vary:添加Vary: Accept-Encoding响应头,兼容各类代理。
10. server_tokens
server_tokens off;
- 作用:隐藏 Nginx 版本号
- 安全优化:防止攻击者针对特定版本漏洞探测。
11. client_max_body_size
client_max_body_size 10M;
- 作用:限制客户端请求体最大大小(上传文件、POST提交)
- 超出直接返回
413 Request Entity Too Large。
四、upstream {} 块(负载均衡专属,位于 http 内)
作用:定义后端服务集群,用于反向代理负载均衡。
upstream backend {
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 backup;
server 127.0.0.1:8082 down;
}
1. server
- 格式:
server IP:端口 [参数];
附加参数
weight=数字:权重,数值越大分配请求越多(加权轮询)backup:备用节点,主节点全部故障后才启用down:标记节点永久不可用。
五、server {} 块(虚拟主机,位于 http 内)
作用:定义单个网站/域名,一个 Nginx 可配置多个 server 实现多站点。
1. listen
listen 80;
listen 443 ssl;
listen 8080;
- 作用:监听端口/IP
ssl:标识此端口为 HTTPS 端口。
2. server_name
server_name www.xxx.com xxx.com;
- 作用:绑定域名,多个域名空格分隔
- 匹配规则:精确域名 > 泛域名 > 默认主机。
3. root
root /data/www/website;
- 作用:指定网站根目录
- 逻辑:
root + 访问URI拼接文件路径。
4. index
index index.html index.htm index.php;
- 作用:指定默认主页文件
- 访问目录时,按顺序查找文件返回。
5. error_page
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
- 作用:自定义错误页面,多个状态码空格合并。
6. SSL 相关指令(HTTPS)
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate:证书公钥文件ssl_certificate_key:证书私钥文件ssl_protocols:启用的TLS协议版本(禁用老旧不安全版本)ssl_prefer_server_ciphers:优先使用服务器加密套件ssl_session_cache/timeout:SSL会话缓存,减少握手耗时。
六、location {} 块(位于 server 内,核心路由匹配)
作用:根据请求 URI 匹配规则,针对不同路径做差异化处理。
1. 匹配规则符号(优先级从高到低)
=精确匹配^~前缀匹配(不继续正则)~区分大小写正则匹配~*不区分大小写正则匹配- 普通前缀匹配(无符号)
2. proxy_pass(反向代理核心)
proxy_pass http://127.0.0.1:8080;
proxy_pass http://backend;
- 作用:将当前请求转发到后端服务/upstream集群。
3. proxy_set_header
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
- 作用:转发请求头,把客户端真实信息传给后端
Host:原始请求域名X-Real-IP:真实客户端IPX-Forwarded-For:多级代理场景下完整IP链X-Forwarded-Proto:区分前端是 http 还是 https。
4. proxy_connect_timeout / proxy_read_timeout
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_connect_timeout:Nginx 连接后端服务的超时时间proxy_read_timeout:连接成功后,读取后端响应的超时时间- 接口慢、长轮询场景需要调大。
5. try_files
try_files $uri $uri/ /index.html;
- 作用:按顺序尝试查找文件/路径,找不到则转发到最后一个地址
- 核心用途:SPA单页应用解决路由刷新404。
6. expires
expires 7d;
- 作用:设置静态资源浏览器缓存过期时间
- 单位:
d天、h小时、m分钟,优化静态资源重复加载。
7. add_header
add_header Cache-Control "public";
add_header X-Frame-Options DENY;
- 作用:自定义响应头,用于缓存、安全策略、跨域等。
8. autoindex 目录浏览
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
autoindex on:开启目录列表访问autoindex_exact_size:off → 以KB/MB显示大小,不展示字节autoindex_localtime:使用服务器本地时间。
9. 防盗链 valid_referers
valid_referers none blocked www.xxx.com;
if ($invalid_referer) { return 403; }
- 作用:校验请求来路,禁止其他站点盗用本站图片/资源。
七、常用内置变量(全局可用)
| 变量 | 含义 |
|---|---|
$host | 当前请求域名 |
$remote_addr | 客户端IP |
$request_uri | 完整请求URI(带参数) |
$scheme | 请求协议(http/https) |
$proxy_add_x_forwarded_for | 拼接多级代理IP |