跳转到内容

Nginx实现正向代理

nginx-proxy-connect-poster
Terminal window
cd /root
# 从http://nginx.org/download下载合适的版本(1.25.3)
tar -xvzf nginx-1.25.3.tar.gz
cd nginx-1.25.3
mkdir modules
# 从https://github.com/chobits/ngx_http_proxy_connect_module下载文件夹
# patch版本需要根据README.md中的版本对应关系
patch -p1 < /root/nginx-1.25.3/modules/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch
# 中途如果提示部分库不存在,补充安装即可。需要config过程不能出错
./configure --add-module=/root/nginx-1.25.3/modules/ngx_http_proxy_connect_module
# 编译并安装,需要解决编译安装过程中可能出现的问题
make && make install

在nginx配置目录增加sites文件夹,创建proxy文件:

server {
listen 7890;
# DNS 解析器,用于正向代理
# resolver <dns_ip> ipv6=off;
# 对 CONNECT 请求的正向代理
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_data_timeout 10s;
# 非 CONNECT 请求的自定义配置
# 示例:非 CONNECT 请求的反向代理
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}

在其他无法访问外网,但能访问代理主机的服务器上通过代理访问

Terminal window
curl --proxy <proxy_server_id>:<proxy_server_port> https://www.baidu.com

为方便起见,可将代理地址暴露在环境变量而无需再发起请求时指定代理地址:

Terminal window
# 增加bashrc内容
export http_proxy=http://<proxy_server_id>:<proxy_server_port>
export https_proxy=http://<proxy_server_id>:<proxy_server_port>
# 请求测试
curl https://wwww.baidu.com