nginx正向代理https
背景
公司有项目因为是和外部合作,考虑到公司网络的不稳定,决定将服务上云,上云之后暴露出一些新的问题:原有的一部分后台服务(比如nacos后台,文件服务后台)不得不暴露在外网,这是非常危险的,因此需要对这部分服务做一些ip限制,因为办公网络并非走的专线,因此对ip限制带来了一些复杂度
目标
稳定访问ip,降低ip限制复杂度
方案
公司的生产服务器走的专线,出口ip比较固定,因此,如果能够通过生产服务器做一个代理访问到后台服务,此时访问后台服务的ip都是固定的出口ip,此时做ip限制就非常好做了。
经过调研,通过nginx做正向代理是非常容易的
现在https已经是基础要求了,所以nginx需要能够正向代理https;实际上nginx代理https也是可以得,不过需要安装特定模块,此处记录下步骤,基于centos 7.x
基础软件准备
yum -y install git patch gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
nginx扩展模块安装
代码clone
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
nginx(重)编译安装
cd /path/to/nginx-source # nginx源码目录
patch -p1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch # 打补丁,具体的使用哪个patch需要根据nginx版本确定
./configure ... --add-module=/path/to/ngx_http_proxy_connect_module # 如果是已经编译过 /path/to/nginx -V 可以查看原有编译参数
make && make install # 编译安装
正向代理配置
server {
listen 8765; #对外服务端口
resolver 223.6.6.6 ipv6=off; #域名解析服务器
proxy_connect;
proxy_connect_allow all;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重启nginx即可生效
代理测试
curl -v 'https://www.baidu.com' -x 127.0.0.1:8765
curl -v 'http://www.baidu.com' -x 127.0.0.1:8765
chrome浏览器代理配置
chrome浏览器可以使用扩展来做域名的代理配置,此处推荐SwitchyOmega,可以到chrome应用商店下载安装该扩展