nginx正向代理配置(nginx正反向代理配置)
什么是正向代理
正向代理是一个位于客户端和真实服务器之间的服务器,为了从真实服务器取得内容,客户端向代理服务器发送一个请求并指定真实服务器地址,然后代理向真实服务器转发请求并将获得的内容返回给客户端。
配置nginx正向代理http请求
如果只代理http请求,可以像下面这样配置:
http{
server {
listen 8080;
resolver 8.8.8.8;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
}
resolver是必须配置的,用来解析真实服务器的地址,它可以解析ipv4与ipv6地址,如果只想解析ipv4地址可以这样配置resolver:
resolver 8.8.8.8 ipv6=off;
配置nginx正向代理https请求
nginx默认是不支持正向代理https请求的,如果要让它代理https请求,则需要安装支持proxy_connect指令的扩展。
扩展的安装有两种方式,一种是编译进nginx程序本身,另一种是动态加载。第一种需要编译时确定,第二种可以后期动态加载进来。
加载动态扩展时nginx默认会检测兼容性,如果不兼容则不会加载,所以我们编译动态扩展时需要加兼容选项,比如下面配置:
./configure --with-compat --add-dynamic-module=/path/to/module
由于我们这里安装扩展时对代码进行了打补丁操作,即使用动态加载的方式也需要用编译后的nginx程序,所以我们用编译进nginx程序本身的方式添加扩展。
添加扩展方式可以参考官网地址:
https://github.com/chobits/ngx_http_proxy_connect_module
最后的配置如下:
http{
server {
listen 8080;
resolver 8.8.8.8 ipv6=off;
proxy_connect;
proxy_connect_allow all;
proxy_connect_connect_timeout 30s;
proxy_connect_read_timeout 30s;
proxy_connect_send_timeout 30s;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
}
如果想对CONNECT请求使用https,可以这样配置:
http{
server {
listen 8080 ssl;
resolver 8.8.8.8 ipv6=off;
ssl_certificate /etc/pki/nginx/server.crt;
ssl_certificate_key /etc/pki/nginx/server.key;
ssl_session_cache shared:SSL:1m;
proxy_connect;
proxy_connect_allow all;
proxy_connect_connect_timeout 30s;
proxy_connect_read_timeout 30s;
proxy_connect_send_timeout 30s;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
}