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. 匹配规则符号(优先级从高到低)

  1. = 精确匹配
  2. ^~ 前缀匹配(不继续正则)
  3. ~ 区分大小写正则匹配
  4. ~* 不区分大小写正则匹配
  5. 普通前缀匹配(无符号)

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:真实客户端IP
  • X-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