使用的是正向代理,访问代理服务器,由代理服务器向目标发起请求
使用的是nginx来搭建代理,需要用到一个模块 ngx_http_proxy_connect_module
该模块,应该算是一个第三方的,需要自行下载安装,
我是源码编译安装
-
下载 ngx_http_proxy_connect_module 源码,
这个需要在github上下载,地址是:https://github.com/chobits/ngx_http_proxy_connect_module
可以直接下载,然后传到服务器中,里面有nginx的很多版本的模块,git下载,怎么样都可以 -
安装nginx
我是已经安装过了,现在相当于是只需要加个扩展将模块整个文件和 nginx源码包下载到 /usr/local/src 目录中,解压,最后是这个样子
已经安装过的,需要将nginx停止,备份启动文件,
进入到安装目录的sbin文件
./nginx -s stop
cp nginx nginx.back
cd nginx-1.24.0/
#很关键的一步,需要使用对应版本的模块,
#出现报错,大概率是版本错误,重新选择版本,为保险需要删除nginx,重新解压一份
patch -p1 < ../ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch
#进行 configure 检查,自己加上自己的配置项,最后加上 模块源码包的地址根目录
./configure --add-module=/usr/local/src/ngx_http_proxy_connect_module-master
#编译
make
如果在make 的时候出现:src/http/ngx_http_request.h:47: error: “NGX_HTTP_CONNECT” redefined [-Werror] 的错误,也是模块的版本不对,删除nginx,重新更改模块版本
因为我是安装扩展,所以不需要 make install ,直接将当前目录objs中的 nginx 文件,复制替换到安装路径的sbin文件中就可以了,
3. 配置nginx
编辑nginx 的配置文件 nginx.config
将以下server代码添加到http中,
server {
listen 自己喜欢的端口;
# dns resolver used by forward proxying
resolver 8.8.8.8;
# forward proxy for CONNECT request
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
# forward proxy for non-CONNECT request
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}`在这里插入代码片`
}
然后保存,启动nginx 就可以了
然后需要将配置的端口号,进行开放,在云平台安全组进行开放,还需要在服务器开放,具体的端口开发,自行查找吧,服务器不一样,命令也不相同
我的:
firewall-cmd --list-ports #查看端口开放情况
netstat -tuln:查看端口占用情况
firewall-cmd --add-port=80/tcp --permanent #开放端口
firewall-cmd --reload #重启生效
查看端口是否被监听: netstat -tnlp | grep 8081
进行测试
curl --proxy 127.0.0.1:8081 https://www.baidu.com
curl --proxy 127.0.0.1:8081 http://www.baidu.com
如果都能访问,就代表已经搭建好了
如果https,不能访问,或者时而好时而不好,可以上面的配置文件中的resolver 替换为:resolver 221.228.255.1 114.114.114.114 valid=5 ipv6=off;就可以了
最终测试 curl --proxy 公网ip:8081 https://www.baidu.com,可以的话,就一点问题都不会有了