需求
A服务器不能访问C服务,B服务器能访问C服务,A需要通过B的代理来访问C服务。
准备文件(ng在官网,补丁包在github上搜的到):
nginx-1.22.0.tar.gz #nginx包
ngx_http_proxy_connect_module-master.zip #代理补丁包
提前安装依赖
yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel
安装编译ngxin
tar zxvf nginx-1.22.0.tar.gz
#解压nginx包
cd nginx-1.22.0.tar.gz
unzip ngx_http_proxy_connect_module-master.zip
#解压代理补丁包
patch -d /usr/local/nginx-1.22.0/ -p 1 < /usr/local/nginx-1.22.0/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch
#打上补丁
#安装补丁的时候如果没有patch命令加上即可 yum -y install patch
./configure --with-http_realip_module --with-threads --add-module=/usr/local/nginx-1.22.0/ngx_http_proxy_connect_module-master
#按需配置nginx
make
#编译
make install
#安装
cd /usr/local/nginx/sbin
安装完毕后去nginx安装目录中配置文件下加上代理配置
cd /usr/local/nginx/conf
vi nginx.conf
server {
listen 8086;
resolver 8.8.8.8;
proxy_connect;
#proxy_connect_allow 443 563;
location / {
proxy_pass https://$host$request_uri;
proxy_buffer_size 64k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
proxy_set_header Content-Type $http_content_type;
proxy_set_header Host $http_host;
proxy_set_header Authorization $http_Authorization;
}
}
}
加上配置后启动nginx
cd /usr/local/nginx/sbin
./nginx -t
#检查配置,为ok的话就可以启动
./nginx
#启动
启动成功后查看端口是否开启代理
netstat -tunlp | grep 8086
#查看对应端口情况
#↓正常情况↓
#tcp 0 0 0.0.0.0:8086 0.0.0.0:* LISTEN 3552/nginx: master
启动正常后可以在另一台服务器用curl指令进行测试
curl --proxy "xxx.xxx.xxx.xxx:8086" -v "www.baidu.com"
#响应结果中有HTTP/1.1 200 OK即为代理访问成功
还可以去代理服务器ngxin日志中查看到对应的代理访问记录
cd /usr/local/nginx/logs
tail -f access.log
################
[30/Aug/2022:19:19:26 +0800] "GET HTTP://www.baidu.com/ HTTP/1.1" 200 2443 "-" "curl/7.29.0"
此处配置的是通用的间接代理方式,间接代理与直接代理的区别与方法可以参考另一篇文章,《Nginx请求直接代理与间接代理配置》