原文章地址:/zhaobin-diray/p/10861195.html
使用nginx作为http/https正向代理
默认nginx是不支持https的正向代理的,要想通过nginx的正向代理,作为https服务器,需要增加一个模块并重新编译nginx。
环境:
centos 7
所需要的文件:
#/chobits/ngx_http_proxy_connect_module
#/packages/centos/7/SRPMS/nginx-1.12.2-1.el7_4.ngx.src.rpm
安装编译工具
#yum install gcc gcc-c++ make -y
#yum install rpm-build rpmdevtools -y
安装依赖
#yum install pcre-devel pcre -y
#yum install zlib-devel zlib -y
#yum install openssl-devel openssl -y
#yum install redhat-lsb-core -y
下载nginx源码、模块源码及rpm构建包
#cd /root
用于支持https代理的模块
#git clone /chobits/ngx_http_proxy_connect_module.git
或者直接去页面下载zip文件
下载后上传至/root目录下,并进行解压
#unzip ngx_http_proxy_connect_module-master.zip
rpm构建及nginx源码
#wget /packages/centos/7/SRPMS/nginx-1.12.2-1.el7_4.ngx.src.rpm
修改nginx的src rpm包,增加ngx_http_proxy_connect_module模块
初始化rpmbuild目录
#cd /root
#rpmdev-setuptree 执行生成目录
#cp /root/nginx-1.12.2-1.el7_4.ngx.src.rpm /root/rpmbuild/SOURCES/
#cd /root/rpmbuild/SOURCES/
#rpm2cpio nginx-1.12.2-1.el7_4.ngx.src.rpm |cpio -dvi
#rm /root/rpmbuild/SOURCES/nginx-1.12.2-1.el7_4.ngx.src.rpm
#tar -xf nginx-1.12.2.tar.gz
#cd /root/rpmbuild/SOURCES/nginx-1.12.2
针对不同nginx版本,需要用不同的path文件,详见该项目github首页
#patch -p1 < /rootngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite.patch
#cd /root/rpmbuild/SOURCES/
#tar -czvf nginx-1.12.2.tar.gz nginx-1.12.2
修改nginx.spec文件,增加模块的编译选项
将nginx.spec中的configure命令中,增加–add-module=/root/ngx_http_proxy_connect_module-master选项。
修改后的命令:
%build
./configure %{BASE_CONFIGURE_ARGS}
–add-module=/root/ngx_http_proxy_connect_module-master
–with-cc-opt="%{WITH_CC_OPT}"
–with-ld-opt="%{WITH_LD_OPT}"
–with-debug
make %{?_smp_mflags}
%{__mv} %{bdir}/objs/nginx
%{bdir}/objs/nginx-debug
./configure %{BASE_CONFIGURE_ARGS}
–add-module=/root/ngx_http_proxy_connect_module-master
–with-cc-opt="%{WITH_CC_OPT}"
–with-ld-opt="%{WITH_LD_OPT}"
make %{?_smp_mflags}
编译rpm包
#rpmbuild -bb nginx.spec
rpm包,在/root/rpmbuild/RPMS路径下。
#cd /root/rpmbuild/RPMS
#rpm -ivh nginx-1.12.2-1.el6.ngx.x86_64.rpm
#rpm -ivh nginx-debuginfo-1.12.2-1.el6.ngx.x86_64.rpm
修改nginx配置文件
基本的http代理,配置文件/etc/nginx/conf.d/default.conf如下。为了适配https,我们需要增加connect语句相关的配置。
简单的http代理,配置文件
server {
resolver 114.114.114.114;
listen 9999;
access_log /var/log/nginx/http_proxy.access.log main;
error_log /var/log/nginx/http_proxy.error.log;
location / {proxy_pass $scheme://$http_host$request_uri;}
}
#https/http代理配置文件
server {
resolver 114.114.114.114;
listen 9999;
proxy_connect;proxy_connect_allow 443 563;proxy_connect_connect_timeout 10s;proxy_connect_read_timeout10s;proxy_connect_send_timeout10s;access_log /var/log/nginx/http_proxy.access.log main;error_log /var/log/nginx/http_proxy.error.log;location / {proxy_pass $scheme://$http_host$request_uri;}
}
#nginx -t 检查配置文件是否正确
#启动即可