Nginx 命令速查表 - Nginx 配置与运维常用命令大全

面向要排查 502/504、改 location 路由、做反向代理的工程师。Nginx 的难点不在命令多,而在 location 匹配规则、proxy_pass 是否带尾部斜杠、upstream 超时参数这些细节——写错不报错,只在流量进来时表现为异常。读完能先 nginx -t 校验再 reload,能从 error log 的 upstream 报错反推后端问题,理解 502 Bad Gateway 与 504 Gateway Timeout 的定位差异。

Web 服务·共 80 条命令·最后更新 2026-09-10
nginx反向代理location配置

典型使用场景

配置反向代理、负载均衡、静态资源服务与 TLS 终止;排查 502/504 网关错误、重定向循环、配置语法错误或权限被拒(13: Permission denied)。

命令与测试 5

nginx -t
测试配置语法,改完必跑再重载
nginx -s reload
平滑重载配置,不断连接
nginx -T
打印完整生效配置,排查 include 冲突
systemctl restart nginx
完整重启(会断连接),一般用 reload
nginx -V
查看编译参数和已启用模块

location 匹配优先级 5

location = /path
精确匹配,优先级最高
location ^~ /static/
前缀匹配且命中后不再查正则
location ~ \.php$
区分大小写的正则匹配
location ~* \.(jpg|png)$
不区分大小写的正则匹配
location /path
普通前缀匹配,优先级最低

反向代理片段 5

proxy_pass http://127.0.0.1:8080;
转发到后端,注意结尾斜杠影响路径
proxy_set_header Host $host;
透传原始 Host 头
proxy_set_header X-Real-IP $remote_addr;
透传真实客户端 IP
proxy_read_timeout 60s;
后端响应超时,长请求 502 时调大
client_max_body_size 50m;
允许的最大上传体积,413 报错时调大

日志与排查 4

tail -f /var/log/nginx/error.log
跟踪错误日志,502/504 先看这里
tail -f /var/log/nginx/access.log
跟踪访问日志
grep " 502 " /var/log/nginx/access.log
筛出 502 请求
curl -I http://localhost
只看响应头,快速验证服务

常见问题 FAQ 5

Q: 如何测试 Nginx 配置是否正确?
A: nginx -t 测试配置语法,改完配置必须跑这个命令再 reload。nginx -T 可打印完整生效配置(含 include 展开)。
Q: 如何配置 HTTPS?
A: 在 server 块中配置 ssl_certificate 和 ssl_certificate_key 指向证书文件,监听 443 端口,并配置 ssl_protocols 和 ssl_ciphers。
Q: 如何设置反向代理?
A: 在 location 块中使用 proxy_pass http://127.0.0.1:8080;,配合 proxy_set_header 透传 Host 和真实 IP。注意结尾斜杠影响路径拼接。
Q: 如何限制访问 IP?
A: 使用 allow/deny 指令:allow 192.168.1.0/24; deny all; 在 location 或 server 块中控制访问来源。
Q: 如何配置负载均衡?
A: 在 http 块中定义 upstream 组,列出多个后端地址,然后在 location 中 proxy_pass 到 upstream 名称。支持轮询、least_conn、ip_hash 等策略。

高频补充命令(容量增强 · REQ-02) 34

nginx -t
测试配置文件语法是否正确
nginx -T
测试并打印完整生效配置(含 include)
nginx -s reload
向主进程发送信号,平滑重载配置
nginx -s stop
快速停止(立即终止 worker)
nginx -s quit
优雅退出(处理完在途请求后停止)
nginx -s reopen
重新打开日志文件(配合日志切割)
nginx -c /path/nginx.conf
指定非默认路径的配置文件启动
nginx -V
查看编译参数、模块与安装路径
worker_processes auto;
按 CPU 核数自动设置 worker 数量
worker_connections 1024;
单个 worker 允许的最大连接数
listen 80;
监听 80 端口
listen [::]:80;
监听 IPv6 的 80 端口
server_name example.com www.example.com;
一个 server 块绑定多个域名
return 301 https://$host$request_uri;
将 HTTP 强制 301 跳转到 HTTPS
location = /exact {}
精确匹配(优先级最高)
location ^~ /static/ {}
前缀匹配且优先于正则
location ~ \.php$ {}
正则匹配(区分大小写)
try_files $uri $uri/ /index.php?$query_string;
依次尝试文件,回退到入口脚本
proxy_set_header Host $host;
反向代理时透传原始 Host 头
proxy_set_header X-Real-IP $remote_addr;
透传客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
追加转发链 IP 列表
proxy_pass http://backend;
将请求转发到 upstream 组或后端地址
upstream backend { server 10.0.0.1; server 10.0.0.2; }
定义负载均衡后端组
add_header X-Frame-Options SAMEORIGIN;
添加安全响应头防止点击劫持
ssl_certificate /path/fullchain.pem;
配置 SSL 证书(fullchain)
ssl_certificate_key /path/privkey.pem;
配置 SSL 私钥
gzip on;
启用响应压缩
gzip_types text/css application/json;
指定可压缩的 MIME 类型
client_max_body_size 20m;
限制客户端上传请求体大小
expires 30d;
为静态资源配置浏览器缓存时长
error_page 404 /404.html;
自定义错误页面
access_log /var/log/nginx/access.log main;
配置访问日志路径与格式
deny 192.168.1.1; allow all;
基于 IP 的访问控制
rewrite ^/old$ /new permanent;
URL 重写(301 永久重定向)

进程控制与性能配置(REQ-02 补充) 22

nginx -g "daemon off;"
前台运行,容器中常以此方式启动
nginx -p /usr/local/nginx -c conf/nginx.conf
指定运行前缀目录与配置文件
kill -s QUIT $(cat /var/run/nginx.pid)
按 PID 文件优雅停止(等价 -s quit)
ps -ax | grep nginx
查看 nginx 主进程与 worker 进程
nginx -e /var/log/nginx/error.log
启动时指定错误日志路径
include /etc/nginx/conf.d/*.conf;
引入拆分后的配置文件
error_log /var/log/nginx/error.log warn;
设置错误日志路径与记录级别
pid /var/run/nginx.pid;
指定主进程 PID 文件路径
user nginx;
指定 worker 进程的运行用户
sendfile on;
启用零拷贝发送,提升静态文件性能
tcp_nopush on;
配合 sendfile 减少报文数提升吞吐
keepalive_timeout 65;
设置长连接超时时间
server_tokens off;
隐藏版本号,降低信息泄露风险
root /data/www;
设置站点根目录
index index.html index.htm;
指定默认首页文件顺序
location /images/ { root /data; }
前缀匹配静态目录并指定根路径
location ~ \.(gif|jpg|png)$ { root /data/images; }
正则匹配图片后缀并指定目录
fastcgi_pass localhost:9000;
将请求转发到 FastCGI 后端
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
设置 FastCGI 脚本路径参数
proxy_redirect off;
关闭代理响应的重定向改写
proxy_connect_timeout 60s;
设置与后端建立连接的超时
stub_status;
开启状态页以查看连接与请求统计

参数矩阵

参数作用示例
-t仅测试配置文件语法,不启动nginx -t
-s reload平滑重载配置(不中断连接)nginx -s reload
-s stop快速停止nginx -s stop
-c指定配置文件路径nginx -c /etc/nginx/nginx.conf
-g启动时传入全局指令nginx -g 'daemon off;'
worker_processes工作进程数,通常设为 autoworker_processes auto;
proxy_pass将请求转发到上游服务proxy_pass http://127.0.0.1:3000;
upstream定义后端服务器池做负载均衡upstream app { server 10.0.0.1; }
try_files按序尝试文件,最后回退try_files $uri $uri/ /index.html;
return 301返回重定向return 301 https://$host$request_uri;

易错点与避坑指南

现象改完配置不生效或新旧配置混用。

原因改了文件却忘记 reload,或直接改了正在运行的 worker 内存。

处置每次改完先 nginx -t 校验语法,再 nginx -s reload 平滑生效;避免 kill 掉 worker 造成连接中断。

现象访问站点返回 502 Bad Gateway。

原因上游(proxy_pass 指向的后端)未启动、端口错或连接被防火墙拦截。

处置在 nginx 主机上 curl 直连上游验证可用性;检查 upstream 地址/端口与后端监听;看 error.log 的 connect() failed。

现象返回 504 Gateway Timeout。

原因上游响应超过 proxy_read_timeout(默认 60s)。

处置调大 proxy_read_timeout / proxy_send_timeout,或优化上游处理耗时;确认不是上游死锁。

现象静态文件返回 403 Forbidden,日志 13: Permission denied。

原因nginx 工作进程用户(如 www-data)无目录/文件读权限,或 SELinux 限制。

处置确认目录有 o+x、文件有 o+r;若启用 SELinux 用 setsebool -P httpd_read_user_content 1 放行。

现象HTTP 被强制跳转到 HTTPS 形成重定向循环。

原因SSL 终端在 CDN/负载均衡层已做 443 跳转,nginx 又再跳一次。

处置确认跳转只在一层发生;若 CDN 已终止 TLS,nginx 侧不要再 return 301 https。

现象配置测试报错 unknown directive。

原因使用了未编译进二进制的模块(如未装 stub_status、lua)。

处置nginx -V 看编译模块;缺失时换用带该模块的包或重新编译,不要在配置里引用不存在的指令。

排障路径

  1. 1先校验配置语法

    nginx -t

    上线前必做,避免 reload 后整个服务起不来。

  2. 2平滑重载新配置

    nginx -s reload

    不中断现有连接;若旧 worker 卡死可用 -s quit 优雅退出。

  3. 3实时跟踪错误日志定位网关错误

    tail -f /var/log/nginx/error.log

    502/504/权限问题都会在 error.log 留下 connect()/permission 线索。

  4. 4从 nginx 主机直连上游验证可用性

    curl -I http://127.0.0.1:3000/health

    排除是上游挂了还是 nginx 配置问题。

提示

  • proxy_pass 结尾带不带斜杠语义完全不同:带 / 会替换 location 前缀,不带则原样拼接。
  • 改完配置先 nginx -t 再 reload,语法错时 reload 不会生效但旧进程继续跑。
  • 502 先看 error.log:connection refused 是后端没起,timeout 是后端太慢。

常见问题

nginx location 匹配顺序是怎么定的?

优先级从高到低:精确匹配 =、带 ^~ 的前缀匹配(命中后不再检查正则)、正则 ~/~*(按配置顺序,第一个命中生效)、普通前缀匹配(取最长前缀)。= 和 ^~ 会立即短路返回,正则则要等所有前缀匹配都试完后才参与。

返回 404 的时候怎么判断是 location 没匹配上还是后端真的 404?

看 error.log:请求根本没进后端时 log 里只有 access,或 proxy_pass 对应 server 未收到请求;若后端返回 404,log 会显示 request to 后端的 upstream 响应。也可以在配置里临时加 try_files 或直接 curl 后端端口做对照。

proxy_pass 带不带尾部斜杠有什么区别?

关键差别:proxy_pass 若带路径(如 http://upstream/api/),匹配 location 时 location 匹配到的剩余部分会拼接到该路径后;若不带路径(http://upstream 或 http://upstream/),则保留原始 URI 处理。带路径常用于把 /foo 重写到后端 /api/...。

502 Bad Gateway 和 504 Gateway Timeout 分别怎么排查?

502 是 Nginx 拿不到后端的有效响应:先确认后端进程是否存活、端口是否在听、防火墙和 proxy_pass 地址是否正确。504 是后端超时未在限期内返回,优先查后端处理耗时,再调 proxy_read_timeout/proxy_connect_timeout。两者都要结合 error.log 里的 upstream 段判断。

改了 nginx 配置用 restart 还是 reload?

优先 nginx -s reload 或 systemctl reload nginx:它平滑重载,不断开已有连接,且会先校验配置合法性。只有改动了 socket 监听、worker 数等无法热加载的参数,或 reload 一直报错时,才用 systemctl restart。改前先 nginx -t 校验。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年9月10日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们