1 概述
1.1 什么是正向代理?
顾名思义,即和反向代理相对立,客户机通过一台代理服务器资源(主要是网络资源)访问其他主机资源的行为。
例如:政务网和互联网场景,在政务网中,一般是不提供访问互联网的权限的,一是节省带宽成本,二是防止非法攻击入侵。但在实际应用场景中,又不得不实现政务网内主机可访问互联网资源。
这个时候正向代理便是使用的契机。
1.2 为什么要使用OpenResty?
可扩展性高,支持高并发及多Lua脚本进行多模块配置
2 环境
硬件
一台互联网区的服务主机(可与互联网进行通信)
1+N台内网主机(不能访问互联网,但可与互联网区主机通信,通过闸机/堡垒机等等方式)
软件
OpenResty1.19.9.1
Ubuntu18.04 Server
3 配置
如下所有配置均在互联网区主机上配置
3.1 简单的Http/Https配置(GET/POST)
直接下载OpenResty的预编译包,官网直接提供
proxy.conf
:
server {
listen 8090;
location / {
resolver 172.20.23.1;
proxy_pass $scheme://$http_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;
}
}
3.2 支持Http Connect配置(CONNECT TCP/IP)
OpenResty或Nginx默认是不支持此类代理的,需要添加模块才能支持,这里我们使用ngx_http_proxy_connect_module-0.0.2
,GitHub自取
此方式不再适用于预编译包,需要自行下载OpenResty源码包进行编译:
# mkdir -p /opt/www && cd /opt/www
# wget https://openresty.org/download/openresty-1.19.9.1.tar.gz
# wget https://github.91chifun.workers.dev/https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip
#
# tar -xvzf openresty-1.19.9.1.tar.gz
# unzip ngx_http_proxy_connect_module-0.0.2.zip
# apt-get install openssl openssl-devel
# apt-get install libpcre3 libpcre3-dev
# apt-get install openssl libssl-dev
# apt-get install zlib1g zlib1g-dev
# cd openresty-1.19.9.1/
# ./configure --prefix=/usr/local/openresty --with-http_stub_status_module --with-http_sub_module --with-http_auth_request_module --with-http_addition_module --add-module=/opt/www/ngx_http_proxy_connect_module-0.0.2
# patch -d build/nginx-1.19.9/ -p 1 < /opt/www/ngx_http_proxy_connect_module-0.0.2/patch/proxy_connect_rewrite_101504.patch
# make && make install
#
编译安装完成后,验证安装是否成功,成功后配置/usr/local/openresty/nginx/conf/nginx.conf
:
server {
listen 8090;
resolver 172.20.23.1;
resolver_timeout 5s;
# connet proxy
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://$http_host$request_uri;
proxy_set_header Host $http_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
}
access_log /opt/www/logs/proxy/access.log;
error_log /opt/www/logs/proxy/error.log;
}
配置完成后,重载服务:
# /usr/local/openresty/bin/openresty -s reload
4 使用
登录到内网主机上,全局配置添加环境变量:
export http_proxy=http://${互联网区IP}:8090
export https_proxy=http://${互联网区IP}:8090
验证是否可用,直接运行:
# curl http://www.baidu.com
5 结语
正向代理无疑给一个互联网+N内网环境提供了网络便利,但随即也会暴露些问题,特别注意的是,如果互联网区主机暴露代理端口且有公网IP,则会被不法分子进行代理攻击等,所以在使用正向代理时,代理端口非必要最好禁止在公网暴露。