最常用且稳妥的做法是用proxy_pass将80端口请求转给后端服务,需配置listen 80、server_name及location /块,并添加host、x-real-ip等头部透传规则,注意proxy_pass结尾斜杠影响路径拼接,最后执行nginx -t校验并reload生效。

直接用 proxy_pass 把 80 端口的请求转给后端服务,是最常用也最稳妥的做法。关键不是“转发端口”,而是让 Nginx 作为反向代理,把进来的 HTTP 请求(无论来自哪个域名或 IP)按规则交给内部服务处理。
监听 80 端口并指定目标地址
在 http 块里加一个 server 块,明确告诉 Nginx:我只管 80 端口的请求,并全部交给后端。
-
listen 80;—— 必须写,表示监听本机 80 端口 -
server_name可填域名(如example.com)、IP(如192.168.1.100)或留空(用_或直接不写),留空时匹配所有未匹配的请求 -
location / { proxy_pass http://127.0.0.1:3000; }—— 表示所有路径都转发到本地 3000 端口的服务
带基础头部透传的完整配置
只写 proxy_pass 往往不够,后端可能拿不到真实客户端 IP 或原始 Host,建议加上这几行:
-
proxy_set_header Host $host;—— 把浏览器发来的 Host 头原样传过去,避免后端识别错误 -
proxy_set_header X-Real-IP $remote_addr;—— 让后端知道谁真正发起请求 -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 支持多层代理时链路 IP 的传递 -
proxy_set_header X-Forwarded-Proto $scheme;—— 告诉后端当前是 http 还是 https(即使前端是 http,这个也建议加上)
注意 proxy_pass 结尾斜杠的影响
这个细节容易导致 404,必须留意:
-
proxy_pass http://127.0.0.1:3000/;(结尾有/)→ 请求/api/user会变成http://127.0.0.1:3000/api/user -
proxy_pass http://127.0.0.1:3000;(结尾无/)→ 请求/api/user会变成http://127.0.0.1:3000/api/user(一样);但请求/会变成http://127.0.0.1:3000,不是http://127.0.0.1:3000/,某些服务对末尾斜杠敏感 - 统一加尾部
/更安全,尤其配合location /api/这类前缀时
验证和生效
改完配置别忘了检查语法、重载服务:
-
nginx -t—— 测试配置是否合法 -
nginx -s reload或systemctl reload nginx—— 不中断服务地应用新配置 - 确认后端服务已在目标地址和端口运行(比如
curl http://127.0.0.1:3000能通) - 检查防火墙是否放行 80 端口(
ufw allow 80或对应命令)











