← 返回首页

使用 Nginx 实现反向代理

反向代理是 Nginx 最常见的使用场景之一。客户端访问 Nginx,Nginx 再将请求转发到后端应用服务,例如 Java、Node.js、Go 或 Python 服务。这样可以统一入口、隐藏后端地址,并方便做 HTTPS、限流、缓存和负载均衡。

一、基础代理配置

假设后端应用运行在本机 127.0.0.1:8080,可以创建如下配置:

server {
    listen 80;
    server_name api.example.com;

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

其中 proxy_pass 指定后端服务地址,proxy_set_header 用于向后端传递真实客户端信息。

二、路径代理注意事项

proxy_pass 后面是否带斜杠,会影响转发路径。下面示例会把 /api/users 转发为 /users

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
}

如果希望后端仍然收到 /api/users,可以写成:

location /api/ {
    proxy_pass http://127.0.0.1:8080;
}

三、超时配置

对于接口耗时较长的服务,需要合理设置连接和读取超时时间:

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_connect_timeout 5s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
}

四、常见排错方法

五、小结

反向代理配置看似简单,但路径处理、请求头转发和超时设置都很关键。建议每个站点使用独立配置文件,并结合日志定位问题。