Ngnix 正向代理配置
1、正向代理与反向代理
正向代理:一种位于客户端和服务器之间的代理服务器。客户端将请求发送给正向代理,然后由代理服务器将请求转发给目标服务器。服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。正向代理对客户端是透明的,客户端无需知道实际服务器的地址。
使用场景:
- 突破网络限制: 在某些地区或网络环境下,用户可能无法直接访问某些网站或服务。此时,可以通过设置正向代理来突破这些限制,实现访问。
- 网络安全:通过正向代理,企业可以监控和管理员工的网络访问行为,隐藏客户端真实 IP,防止敏感数据泄露。
- 内容过滤:学校、图书馆等公共场所可以通过正向代理过滤不良内容,保护用户免受不良信息的侵害。
- 提高访问速度:代理服务器设置硬盘缓冲区,可以将部分高频请求的响应数据保存到缓冲区中,以提高访问速度。

反向代理:一种位于服务器和客户端之间的代理服务器。客户端将请求发送给反向代理,然后由代理服务器根据一定的规则将请求转发给后端服务器。后端服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。反向代理对客户端是透明的,客户端无需知道实际服务器的地址,只需将反向代理当作目标服务器一样发送请求就可以了。
使用场景:
- Web 应用: 在 Web 应用中,反向代理常用于实现负载均衡、安全访问控制以及缓存优化等功能。
- API 网关: API 网关通常采用反向代理的方式,对外部请求进行统一管理和调度,实现 API 的安全、高效访问。
- CDN 加速: 内容分发网络(CDN)通过在全球范围内部署反向代理服务器,实现内容的就近访问和加速传输。

相同点:
- 正向代理和反向代理都位于客户端和真实服务器之间,它们的主要功能都是将客户端的请求转发给服务器,然后再将服务器的响应转发给客户端。
- 两者都能通过缓存机制提高访问速度。当客户端请求某个资源时,如果代理服务器已经缓存了该资源,就可以直接从缓存中提供,而无需再次从原始服务器获取,从而节省了时间和带宽。
不同点:
- 正向代理是为客户端提供代理服务,即服务器不知道真正的客户端是谁。而反向代理则是为服务器提供代理服务,即客户端不知道真正的服务器是谁。
- 正向代理通常是由客户端架设的,而反向代理则是由服务器架设的。
- 正向代理的主要用途是为在防火墙内的局域网客户端提供访问 Internet 的途径,侧重于解决访问限制问题。而反向代理的主要用途是将防火墙后面的服务器提供给 Internet 用户访问,其目的在于实现负载均衡、安全防护等。
- 在正向代理中,服务器不知道真正的用户是谁;而在反向代理中,用户不知道真正的服务器是谁。
2、配置正向代理
nginx 官方并不支持直接转发 https 请求,默认只支持 http,nginx.conf 配置 http 正向代理测试如下:
server {
listen 18090;
resolver 114.114.114.114; # 指定 DNS 服务器 IP 地址
location / {
proxy_pass http://$host$request_uri; # 设定代理服务器的协议和地址
}
}
# 测试百度访问,可以看到 https 访问失败
curl -I http://www.baidu.com -x 192.168.216.128:18090
curl -I https://www.baidu.com -x 192.168.216.128:18090

需要使用 ngx_http_proxy_connect_module 模块来完成 https 正向代理
按自身 Nginx 版本选择相应版本补丁:patch 版本说明
# 安装工具包
yum install -y patch wget
# 下载 nginx
wget http://nginx.org/download/nginx-1.24.0.tar.gz
# 解压
tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0
# 下载 ngx_http_proxy_connect_module 模块源码
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
# 使用 patch 命令导入补丁
patch -p1 < ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch
# 安装编译 nginx 所需依赖
yum -y install gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 配置 Nginx 编译选项, 使其在编译时包含 ngx_http_proxy_connect_module 模块
./configure --prefix=/data/nginx \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_v2_module \
--add-module=ngx_http_proxy_connect_module
# 编译和安装 nginx,已安装 nginx 的服务器仅需 make,通过替换 sbin 下的执行文件更新 nginx
make -j2 && make -j2 install
# 启动 Nginx
/data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
导入补丁时可能遇到的报错:patch: ** Only garbage was found in the patch input.
patch 成功时:

server {
listen 19000;
# 指定 DNS 服务器
resolver 223.5.5.5;
# 开启 HTTP CONNECT 方法支持,用于建立与后端服务器的 TCP 连接
proxy_connect;
# 允许通过代理的端口
proxy_connect_allow 443;
# 建立连接的超时时间为 10 秒
proxy_connect_connect_timeout 10s;
# 读取数据的超时时间为 10 秒
proxy_connect_data_timeout 10s;
location / {
# 将请求转发到代理目标
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
server {
listen 19000;
server_name localhost;
# 指定 DNS 服务器
resolver 114.114.114.114 223.5.5.5 119.29.29.29 180.76.76.76 valid=60s;
# 设置解析 DNS 的超时时间为 3 秒
resolver_timeout 3s;
# 开启 HTTP CONNECT 方法支持,用于建立与后端服务器的 TCP 连接
proxy_connect;
# 允许通过代理的端口,只影响 CONNECT 请求(HTTPS代理)
proxy_connect_allow 443 80;
# 建立连接的超时时间为10秒
proxy_connect_connect_timeout 10s;
# 读取数据的超时时间为10秒
proxy_connect_read_timeout 10s;
location / {
# 请求动态转发
proxy_pass $scheme://$http_host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
http {
resolver 223.5.5.5;
# 定义 HTTP 允许的端口,0 为禁止,1 为允许
map $server_port $allowed_http_port {
default 0;
80 1; # HTTP
3000 1;
}
server {
listen 19000;
location / {
# 检查 HTTP 端口是否允许
if ($allowed_http_port = 0) {
return 403 "HTTP port $server_port is not allowed.\n";
}
proxy_pass $scheme://$http_host$request_uri;
}
}
}
3、代理使用设置
Linux 服务器代理设置,将所有流量通过 192.168.216.128 出口访问
vim /etc/profile
export http_proxy=192.168.216.128:18090
export https_proxy=192.168.216.128:18090
export ftp_proxy=192.168.216.128:18090
source /etc/profile
Windows 服务器代理设置

- 本文作者:Nine
- 本文链接:https://blog.nine.gt.tc/2025/08/20/nginx-forward-proxy/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)