Skip to content

Nginx 反向代理

推荐查看 Nginx 官方文档,此处记录并不全面。

HTTP 反向代理

配置此功能非常简单,在 http {} 板块下新建 server {} 板块:

txt
http {
    server {
        listen 8080;
        server_name proxy.example.com;
        location / {
            proxy_pass https://target.example.com/;
        }
    }
}

这样当用户访问 https://proxy.example.com:8080 时,会被跳转到 https://target.example.com

同时还可以借助 location 字段,实现在特定 URL 跳转:

仅需将 location / {} 改为 location /proxy/ {},这样当用户访问 https://proxy.example.com:8080/proxy 时,会被跳转到 https://target.example.com

使用反向代理还可以实现负载均衡,使用 upstream name {} 板块添加后端服务器组。

txt
http {

    upstream backend {
        server backend.example.com:8080;
        server backend.example.com:8081;
    }

    server {
        listen 8080;
        server_name proxy.example.com;
        location / {
            proxy_pass backend;
        }
    }
}

upstream name {} 中,可以用 weight 指定权重,ip_hash 固定同一 ip 的访问在同一台服务器中。

txt
# ...
    upstream backend {
        ip_hash;
        server backend.example.com:8080 weight=1;
        server backend.example.com:8081 weight=3;
    }
# ...

TCP 反向代理

此模块依赖于 Nginx 的 Stream 模块,此模块的安装默认不包含在 Nginx 的默认编译选项中。

要使用此模块,在先前的基础上,添加 --with-stream 参数进行编译:

bash
./configure --with-stream

随后重新编译安装 Nginx 并冷重启 Nginx 服务:

bash
make && sudo make install && nginx -s stop && nginx

nginx.conf 中添加以下板块:

txt
stream {
    server {
        listen 13157;
        proxy_pass acovia.net:29185;
    }
}

这样所有在 acovia.net:29185 的 tcp 流量会被转发在本机的 13157 端口。