默认的情况下,使用nginx做正向代理可以解析http请求,
对于诸如baidu.com这样的https请求,nginx默认并不支持,不过我们可以借助第三方模块来实现。
1、先说默认情况下的代理配置
配置方法如下:
#user nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
server {
resolver 192.168.31.1;
resolver_timeout 5s;
listen 8888;
access_log /nginx-1.10.3/logs/proxy.access.log;
error_log /nginx-1.10.3/logs/proxy.error.log;
location / {
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
}
listen的就是监听的端口。
resolver就是一个dns地址,如果在家里用路由器上网,一般也可以配成你的路由器地址。
其它配置不改也行,这样配置后,对非https的访问没什么问题,不过这显然不够用,我们接着讲一下如何实现https的代理。
2、再说用nginx同时代理https和http
这里我们需要借助大神开发的【ngx_http_proxy_connect_module】
首先要确保你安装了patch,gcc、gcc++、pcre、zlib,这些都是我们用到的依赖软件或静态库
yum group install -y "Development Tools"
yum install -y patch pcre-devel pcre zlib-devel zlib
然后去github下载下来这个模块,就是直接去官网把整个目录下下来,解压放到你centos的某个目录下。
我这里留了个百度网盘的备份: 链接:https://pan.baidu.com/s/1eqcFW8tEE6SEg3b9OHyThA 密码:c8e2
再下载nginx、按照官网说明执行以下命令
$ wget http://nginx.org/download/nginx-1.9.2.tar.gz
$ tar -xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2/
$ patch -p1 < /path/to/ngx_http_proxy_connect_module/proxy_connect.patch
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
$ make && make install
注意其中的【/path/to/ngx_http_proxy_connect_module】,指的就是你从github上,下载的这个模块的存放路径。
完成后,/usr/local/nginx就是编译后的nginx的路径。
然后编辑/usr/local/nginx/conf/nginx.conf(注意备份原文件),修改后内容如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
resolver 192.168.31.1;
resolver_timeout 5s;
listen 8889;
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
#proxy_pass $scheme://$host$request_uri;
#proxy_set_header Host $http_host;
proxy_pass http://$host;
proxy_set_header Host $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
然后保存。
listen的就是监听的端口。
resolver就是一个dns地址,如果在家里用路由器上网,一般也可以配成你的路由器地址。
最后执行:
/usr/bin/local/nginx/sbin/nginx
找一台外网的机器,配置一下代理,百度上查看一下本机ip,如果成功的话,显示的就是代理服务器的外网IP了。