Nginx 反向代理配置入门:从 0 到上线(含 HTTPS、缓存与常见 502 排查)

你可以把 Nginx 理解为网站的“门卫”:外部请求先到 Nginx,再由它转发给后端应用。配置得当能提升安全性、稳定性,还能顺手做 HTTPS、缓存与限流。

步骤 1:最小可用的反向代理配置

假设后端服务在本机 127.0.0.1:3000,你的域名是 example.com

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://127.0.0.1:3000;
    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;
  }
}

改完后测试并重载:

nginx -t
nginx -s reload

步骤 2:HTTPS(证书)怎么配

如果你用 Let's Encrypt / Certbot,通常会生成证书文件。Nginx 配置大致如下:

server {
  listen 443 ssl http2;
  server_name example.com;

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

server {
  listen 80;
  server_name example.com;
  return 301 https://$host$request_uri;
}

步骤 3:缓存与静态资源(可选但很常用)

静态资源(图片、CSS、JS)可以设置更长缓存:

location ~* \.(css|js|png|jpg|jpeg|gif|svg|webp)$ {
  expires 30d;
  add_header Cache-Control "public";
  try_files $uri @backend;
}

location @backend {
  proxy_pass http://127.0.0.1:3000;
}

要点清单

  • proxy_set_header 建议配置齐全,避免丢失真实IP与协议。
  • nginx -t 先检查语法,再 reload。
  • 502/504 大多是后端服务挂了、端口不通、超时不够或权限问题。

常见问题 FAQ

1)出现 502 Bad Gateway,第一步查什么?

  • 确认后端进程在跑:端口是否监听。
  • 从 Nginx 机器上 curl 后端:curl http://127.0.0.1:3000
  • 看 Nginx 错误日志:通常能看到 connect() failed 或 upstream timed out。

2)WebSocket 需要额外配置吗?

需要加升级头:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

3)反向代理后后端获取到的协议总是 http?

确保传递 X-Forwarded-Proto,并在后端框架里信任代理(trust proxy)。

4)配置改了但没生效?

确认 reload 成功、配置文件路径正确、以及没有被 include 的其他 server 块抢占了同名域名。

502/504 排查流程图

上一篇 OpenClaw 喂饭级一键脚本发布:Linux/Mac 兼容,小白零门槛上手(含免费 GPT-5.4 API)