你可以把 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 块抢占了同名域名。
