基于nginx实现正向代理(linux版本)
介绍
在企业开发环境中,局域网内的设备通常需要通过正向代理服务器访问互联网。正向代理服务器充当中介,帮助客户端请求外部资源并返回结果。局域网内也就是俗称的内网,局域网外的互联网就是外网,在一些特殊场景内,例如:医院。而局域网中的客户端要访问这些资源时,就需要通过代理服务器。这种通过代理服务器访问外部网络资源的方式,就是正向代理。正向代理不仅用于提升访问速度,还能提高网络安全性、管理访问权限和优化网络流量。
原生 nginx 可以作为 http 的正向代理服务器,但是不能用做 https 的正向代理服务器。因为 http 正向代理使用的是 get 请求,但是 https 使用的确实 connect 请求,而原生 nginx 不支持 connect 请求。所以需要第三方模块 ngx_http_proxy_connect_module 来支持 https 的正向代理,使用这个插件,意味着需要重新编译 nginx,在编译的过程中,将插件添加进去。本次编译以目前稳定版 1.26.2 为例。
安装部署过程
-
获取安装包。nginx安装包、ngx_http_proxy_connect_module 安装包。1.26.2的可以直接nginx从官网:https://nginx.org/en/download.html, ngx_http_proxy_connect_module 从 github:https://github.com/chobits/ngx_http_proxy_connect_module 。
-
将安装包拷贝到服务器上,然后提前安装一些库:gcc,openssl,pcre,zlib库了,这些nginx安装必须的库。假设我们这里把安装文件都放置在/root/目录下
yum install gcc
yum install openssl-devel
yum install pcre-devel
yum install zlib-devel
- 解压安装包并安装
## 解压 tar -xzvf nginx-1.26.2.tar.gz ## 进入解压后的目录 cd nginx-1.26.2 ## patch connect模块 ,这个版本需要根据github上的版本对照确定 ## nginx1.26.2对应的是 proxy_connect_rewrite_10210.patch patch -p1 < /root/ngx_http_proxy_connect_module/patch/\ proxy_connect_rewrite_102101.patch ## 编译校验 ,这里 --prefix=/usr/local/nginx 指定的最终安装目录,这个可以根据实际情况调整 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module \ --with-http_ssl_module \ --add-module=/root/ngx_http_proxy_connect_module ## 编译 make ## 安装 make install
- 配置
server {
## 开放的监听端口
listen 8081;
## dns,这个很重要,61.147.37.1这个和所在服务器的dns要保持一致
## 114.114.114.114 8.8.8.8这两个是电信默认的dns,可以不要
resolver 61.147.37.1 114.114.114.114 8.8.8.8;
proxy_connect;
proxy_connect_allow 443 80;
proxy_connect_timeout 10s;
proxy_read_timeout 10;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass $scheme://$http_host$request_uri;
# 发送到被代理网站的请求需要添加Host请求头
proxy_set_header Host $host;
}
}