Nginx做代理服务器代理支持HTTPS请求

首先大家应该会用到过nginx做http的代理,这种情况网络上搜一下大把大把的文章都按照步骤都能做出http的代理。

还有一种不需要安装模块时用http做https的代理。举个例子,内网一台机子A不能访问https://www.baidu.com,另一台B能访问https://www.baidu.com,那在B上安装nginx并做一个正向代理,配置信息如下即可。

server {

listen 82;

location / {

resolver 8.8.8.8;

proxy_pass https://$http_host$request_uri;

}

但是这种情况A通过B的82端口代理时只能访问http://www.baidu.com,并不能访问https://www.baidu.com,注意少了一个s。我们发现在访问https://www.baidu.com时是报错curl: (56) Received HTTP code 400 from proxy after CONNECT。用curl http://www.baidu.com时我们发现是可输出百度的内容,但是在浏览器里输入却会默认添加s,这样还是无法正常访问https的域名。

后面我们将用另外一种方式做代理https的方式,可以直接访问https而不需要访问http来转发请求。

首先我们要做的是在nginx上添加一个大牛人写的ngx_http_proxy_connect_module模块,添加后在nginx的配置文件配置即可。

下面将提供用yum安装nignx方式下做https代理的步骤。

用yum安装下的nginx做https代理

先查看当前安装的nginx版本,命令:nginx -V

下载与当前版本一致的nginx以及ngx_http_proxy_connect_module模块

Nginx做代理服务器代理支持HTTPS请求_第1张图片

当前版本为1.12.2,命令:wget http://nginx.org/download/nginx-1.12.2.tar.gz

命令:wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/master.zip

解压命令:

tar -xzvf nginx-1.12.2.tar.gz  

unzip master.zip

进入nginx文件夹并安装connect补丁

cd nginx-1.12.2

patch -p1 < /root/nginx/ngx_http_proxy_connect_module/patch/proxy_connect.patch

后面是ngx_http_proxy_connect_module模块具体的路径

补丁版本对应关系请参考作者主页:https://github.com/chobits/ngx_http_proxy_connect_module

根据第一步查到已有的模块,加上本次需新增的模块

执行的命令: ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --add-module=/root/nginx/ngx_http_proxy_connect_module-master

编译时如出问题则需要添加依赖,百度一下即可。

一般还需要这些命令:

yum -y install libxml2 libxml2-dev libxslt-devel

yum -y install gd-devel

yum -y install perl-devel perl-ExtUtils-Embed

yum -y install GeoIP GeoIP-devel GeoIP-data

编译完成后执行 make  

注意:千万别执行make install

编译成功移动新的nginx前先备份一个原来的nginx 出错了还可以还原回去

命令: mv /usr/sbin/nginx /usr/sbin/nginx.bak

然后把obj里的nginx移动到/usr/sbin/ 

配置nginx.conf文件

server {

listen 8443;

# 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即可,测试结果


Nginx做代理服务器代理支持HTTPS请求_第2张图片

你可能感兴趣的:(Nginx做代理服务器代理支持HTTPS请求)