Nginx 配置代理服务器的详细方法

Source

 

一、什么是代理服务器?

类型 说明
正向代理 客户端通过代理访问目标服务器(隐藏客户端身份)
反向代理 客户端访问代理服务器,由代理服务器请求后端服务器(隐藏后端服务器)

二、Nginx 反向代理配置方法(最常用)

 场景:将 http://example.com 请求代理到 http://192.168.1.100:8080

📄 配置示例:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://192.168.1.100:8080;
        
        # 设置请求头,传递主机名和真实 IP
        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 代理的目标地址(可以是 IP:PORT、域名、upstream 名称)
proxy_set_header 设置请求头,让后端服务器知道原始信息
proxy_connect_timeout 连接超时时间
proxy_read_timeout 读取响应超时时间

可选优化配置:

    proxy_connect_timeout 60s;
    proxy_read_timeout 120s;
    proxy_send_timeout 120s;
    proxy_buffering off; # 关闭缓冲(适合流媒体)

三、带负载均衡的反向代理配置

如果你有多个后端服务,可以使用 upstream 块定义服务器组:

upstream backend_servers {
    least_conn;
    server 192.168.1.100:8080 weight=3;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080 backup;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

 负载均衡策略:

策略 说明
round-robin 默认,轮询
least_conn 最少连接优先
ip_hash 根据客户端 IP 哈希分配
weight 权重分配(值越大,请求越多)
backup 备用服务器(只有其他都宕机时才启用)

四、正向代理配置(可选)

正向代理常用于内网访问外网,需要使用 ngx_http_proxy_connect_module 模块(Nginx 默认不包含该模块)。

示例(需模块支持):

server {
    listen 8080;

    # 正向代理配置
    resolver 8.8.8.8;

    location / {
        proxy_pass https://$host$request_uri;
        proxy_ssl_server_name on;
        proxy_ssl_verify on;
    }
}

📌 使用方法:

curl -x http://your-nginx-ip:8080 http://example.com

 五、测试与重启

完成配置后:

sudo nginx -t           # 检查配置是否正确
sudo systemctl reload nginx   # 重新加载配置

 六、应用场景举例

应用场景 配置要点
前后端分离项目 代理前端到静态资源,后端 API 到后端服务
微服务架构 用 Nginx 做统一入口,代理到不同服务
HTTPS 代理 加上 ssl_certificatessl_certificate_key
流媒体代理 设置 proxy_buffering off
跨域代理 用代理解决浏览器跨域问题

📎 七、完整 HTTPS 代理配置示例

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

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

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

附加建议

  • 使用云服务器搭建Nginx 反向代理 
  • 使用 upstream 模块实现负载均衡。
  • 使用 proxy_cache 缓存后端响应,提高性能。
  • 使用 access.log 和 error.log 分析代理请求。