HTTP CONNECT隧道七层正向代理
Nginx七层正向代理
前言
位于客户端和目标服务器之间的Nginx正向代理服务器,客户端向Nginx正向代理发送一个请求并指定目标服务器,然后代理向目标服务器转交请求并将获得的内容返回给客户端及本地代理服务器缓存。
正向代理Http请求
# 10.122.10.98,七层代理,在http模块下添加,正向代理转发http请求
server {
# 监听8080端口
listen 8080;
# 指定DNS服务器IP地址
resolver 114.114.114.114;
# 服务器IP或域名
server_name localhost;
# 正向代理转发http请求
location / {
proxy_pass http://$host$request_uri;
proxy_set_header HOST $host;
# 传递真实客户端IP
proxy_set_header X-Real-IP $remote_addr;
# 传递端口
proxy_set_header X-Real-Port $remote_port;
# 传递经过代理链的客户端IP列表
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 传递请求协议(http/https)
proxy_set_header X-Forwarded-Proto $scheme;
}
}
通过设置系统代理,或者curl http://www.baidu.com -v -x 10.122.10.98:8080
访问。
正向代理Https请求
Nginx官方版本并不直接支持HTTPS请求的转发,需要ngx_http_proxy_connect_module
模块支持,安装参考。
# 10.122.10.98,七层代理,在http模块下添加,转发http、https请求
server {
listen 8080;
# dns resolver used by forward proxying
resolver 114.114.114.114;
# forward proxy for CONNECT request
proxy_connect;
proxy_connect_allow 443 80;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
# forward proxy for non-CONNECT request
location / {
proxy_pass $scheme://$host;
proxy_set_header Host $host;
}
}
在另外一台机器,通过设置系统代理,或者curl http://www.baidu.com -v -x 10.122.10.98:8080
,或者curl https://www.baidu.com -v -x 10.122.10.98:8080
访问。
正向代理转发两次
Client Machine C –> Nginx Machine B(installed connect_module)–> Nginx Machine A(installed connect_module) –> target website
在前面配置好正向代理请求Http,或者正向代理请求Https之后,配置如下 。
# 10.122.10.218,内网二次转发,只支持转发http请求,proxy_connect模块无法转发https请求
server {
listen 8081;
#server_name localhost;
#resolver 10.122.10.98 ipv6=off;
#proxy_connect;
#proxy_connect_allow 443 80;
#proxy_connect_connect_timeout 10s;
#proxy_connect_read_timeout 10s;
#proxy_connect_send_timeout 10s;
location / {
proxy_pass $scheme://10.122.10.98:8081;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
在另外一台机器,通过设置系统代理,或者curl http://www.baidu.com -v -x 10.122.10.218:8080
访问正常,curl https://www.baidu.com -v -x 10.122.10.218:8080
访问不正常。
Linux设置代理
# 编辑
vim /etc/profile
export http_proxy=http://proxy_address:port
export https_proxy=https://proxy_address:port
# 设置
export http_proxy=http://lideyu:lideyu@10.122.10.98:808
export https_proxy=http://lideyu:lideyu@10.122.10.98:808
# 重新加载系统环境变量文件
source /etc/profile
# 查看环境变量
env
# 取消代理,profile注释代理后执行生效
unset http_proxy
unset https_proxy