前言

最近在折腾服务器的时候,不少小伙伴都在问关于Nginx反向代理的配置问题。确实,反向代理在我们的日常开发、建站中太常见了,但配置一不对就容易出现各种奇怪的问题。今天我就把常见的配置方法和排坑经验整理一下,希望能帮到大家。

反向代理工作原理示意图

图示:用户请求经过Nginx反向代理转发至后端服务器的流程

什么是反向代理?

简单来说,反向代理就是服务器端的“中介”。用户访问你的服务器,实际上是由Nginx接收请求,然后根据规则转发给后端的应用(比如Node.js、Python、PHP等),最后再把结果返回给用户。这样做的好处很多:

  • 隐藏后端真实IP,提高安全性
  • 负载均衡,分发流量
  • 统一处理SSL证书
  • 缓存加速

基础配置实战

1. 最简单的HTTP转发

假设你的后端应用运行在 127.0.0.1:3000,现在想通过域名 example.com 访问,可以这样配置:

server {
    listen 80;
    server_name example.com;

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

这样访问 example.com 就会自动转发到本地的3000端口。

2. 处理 WebSocket

如果你的应用是WebSocket,需要添加额外的头部支持,否则连接会断开:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

502 Bad Gateway 错误提示页面

图示:常见的 Nginx 502 Bad Gateway 错误

3. 传递真实IP

后端应用经常需要获取用户的真实IP,但默认情况下Nginx会替换成127.0.0.1。我们需要加上这些头部:

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;
}

常见问题排查

问题1:502 Bad Gateway

可能原因:

  • 后端服务没启动
  • 端口不对
  • 防火墙拦截

解决方法:

  1. 检查后端服务是否运行:systemctl status your-service
  2. 确认端口是否正确:netstat -tlnp | grep 3000
  3. 查看Nginx错误日志:tail -f /var/log/nginx/error.log

问题2:404 Not Found

可能原因:

  • proxy_pass 后的路径配置错误
  • 后端路由问题

解决方法: 如果 proxy_pass 后面有路径(如 /api),注意末尾斜杠的区别:

  • proxy_pass http://backend/; 会去掉匹配的 location 路径
  • proxy_pass http://backend; 会保留完整路径

问题3:SSL证书配置后无法访问

可能原因:

  • 证书路径错误
  • 端口没开放443

解决方法:

server {
    listen 443 ssl;
    server_name example.com;

ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

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

记得开放防火墙端口:ufw allow 443/tcp

进阶技巧

1. 负载均衡

如果有多个后端服务,可以实现负载均衡:

upstream backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

2. 缓存配置

对静态资源缓存可以减少服务器压力:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

server {
    location / {
        proxy_cache my_cache;
        proxy_pass http://127.0.0.1:3000;
    }
}

总结

Nginx反向代理虽然看起来简单,但细节很多。遇到问题时,首先要看错误日志,80%的问题都能在日志里找到线索。如果能把自己的配置环境描述清楚,别人也更容易帮你定位问题。

希望这份指南能帮大家少踩一些坑。如果有其他问题,欢迎在评论区交流!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭