什么是代理,什么是正向代理,什么是反向代理,详见代理那些事
用nginx搭建反向代理,这个是nginx最大的功能,网上资料一大堆,这里不再复述。
用nginx搭建正向代理,假如只是http的代理,那么网上也是一大堆,也都是正确的;但是https的代理,网上所讲得一大堆,绝大部分是错误的。(吐槽一下,明明是很明显错误的内容,难道作者都没有验证一下就发出来吗?)希望读者能通过搜索引擎找到我这一篇文章,而不是先找到那些错误的文章,耗时耗精力。
nginx的正向代理支持https,其实也是很简单,只要 nginx 加入 ngx_http_proxy_connect_module 这个模块即可。(所以网上的文章假如说支持https的nginx正向代理没有提到 ngx_http_proxy_connect_module 这个模块,看都不用看,是错误的)
下面是安装步骤:
#所有操作在 /opt 目录下
cd /opt
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar xzvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
patch -p1 < /opt/ngx_http_proxy_connect_module/patch/proxy_connect_xxxx.patch
#注意这里选用的补丁文件proxy_connect_xxxx.patch需要参照 https://github.com/chobits/ngx_http_proxy_connect_module 中的nginx不同版本来决定,如下所示:
因为我们的nginx是1.14版本,参照上面,所以上面的命令应该是:
patch -p1 < /opt/ngx_http_proxy_connect_module/patch/proxy_connect_1014.patch
假如不成功,会显示错误信息。成功后,进行编译nginx
./configure --add-module=/path/to/ngx_http_proxy_connect_module
make && make install
然后nginx的配置如下:
server {
listen 6281;
resolver 114.114.114.114;
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
#下面的居然是 http 而不是 https,很奇怪的设置,但是事后验证确实没有问题
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
然后启动nginx,这样即可支持 https 的正向代理。
另外多说两句:
1. 一定要知道这样一件很重要的事情,nginx的 http/https的代理,是不支持认证的(不是说nginx不支持认证,而是这种机制下认证是没有用的),所以该代理只能放在内网里,否则你就等着哪一天突然你的外网nginx被别人使用了。
2. 支持 http/https 的代理,还可以用 tinyproxy。