我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux:Nginx 正向代理实现内网访问互联网

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux:Nginx 正向代理实现内网访问互联网

前言:

        因为公司的某些系统需要访问互联网上的某些功能,每个系统的服务器都开通访问互联网的能力太麻烦并且不方便管理,所以打算只对一台服务器开通访问互联网的能力,并在此服务器基础上搭建 nginx 正向代理,方便其他系统可以使用该服务器作为代理借道访问互联网功能。

一、调研

互联网的访问有两种协议:https 和 http;nginx 默认只支持http,不支持 https,所以想达成nginx正向访问互联网有两种方案:

  1. nginx 正向代理做两个端口,一个端口代理 http 访问,另一个端口代理 https 访问;
  2. 添加 https 代理模块并打补丁包,这样可以在同一个端口处理 http 和 https 协请求;

相对第二种方案,第一种方案访问 https 时需要把网址的 https 替换成 http;并且有两个端口,使用起来也比较麻烦;所以下面也就以第二种方案进行实施。

二、安装所需要的依赖

yum -y install gcc gcc-c++ pcre-devel pcre zlib-devel zlib openssl-devel openssl patch

上述所有的依赖包都会用到,即使不安装在后续步骤也会提示。这里我遇到一个问题,openssl-devel 安装有版本问题,需要降低,非常麻烦,后来还是手动源码安装解决的,如果你也有可以参考:

openssl 源码官网:https://www.openssl.org/source

执行解压命令:tar xzvf openssl-x.x.x.tar.gz执行命令:cd openssl-x.x.x执行命令:sudo ./config --prefix=/usr/local/openssl执行命令:make执行命令:make install执行命令:mv /usr/bin/openssl /usr/bin/openssl.bak(是否覆盖回复y或者Y)执行命令:ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl执行命令:echo "/usr/local/openssl/lib" >> /etc/ld.so.conf执行命令:ldconfig -v查看SSL版本:openssl version

三、获取 nginx 和 https 代理模块以及补丁包

Nginx下载官网:http://nginx.org/en/download.html

 这里解释下为啥不选最新的稳定版1.22.1:下面这个代理模块的补丁包跟 nginx 有版本对应关系,最新版本暂不支持。

https 模块下载地址:https://github.com/chobits/ngx_http_proxy_connect_module

 直接把全部代码下载下来,其中 patch 目录是补丁包存放目录,里面包含之前nginx版本对应的所有补丁包,当前对应关系如下:

 四、安装和配置

nginx 安装包和 https 模块安装包都放到服务器统一目录下:

 在此基础上执行下面命令:

# 解压两个包tar -xvf nginx-1.20.2.tar.gzunzip ngx_http_proxy_connect_module-master.zip# 进入 nginx 目录cd nginx-1.20.2/# 打补丁patch -p1 < /apps/temp/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_1018.patch# 指定 nginx 安装目录,添加 https 代理模块,并添加 https 支持./configure --prefix=/apps/app/nginx --add-module=/apps/temp/ngx_http_proxy_connect_module-master --with-http_ssl_module# 编译make# 安装make install

上述命令执行完就安装好了nginx,进入 nginx 安装目录:

在 conf 目录下配置 nginx.conf 如下:

    server {        listen 8443;        resolver 10.176.161.63;#DNS        server_name localhost;        proxy_connect;        proxy_connect_allow 443 80;        proxy_connect_connect_timeout 10s;        proxy_connect_read_timeout 10s;        proxy_connect_send_timeout 10s;        location / {            proxy_set_header Host $host;            proxy_pass $scheme://$http_host$request_uri;    #设定代理服务器的协议和地址             proxy_buffers 256 4k;            proxy_max_temp_file_size 0k;            proxy_connect_timeout 30;            proxy_send_timeout 60;            proxy_read_timeout 60;            proxy_next_upstream error timeout invalid_header http_502;        }    }

在 nginx 目录下有一个 sbin 目录,里面是 nginx 命令,进入执行配置文件校验命令:

在 sbin 目录下指定配置文件启动nginx:

./nginx -c /apps/app/nginx/conf/nginx.conf

 五、测试代理

使用命令测试代理响应:

curl -I --proxy localhost:8443 http://nginx.orgcurl -I --proxy localhost:8443 https://www.baidu.com

六、设置黑白名单

上述的配置并没有安全管控策略,假如其他非授权的系统也通过代理访问外网就存在风险性,所以添加黑白名单很重要(推荐白名单方式)。

在 nginx.conf 同级目录下创建 ip_white.conf 文件,写入配置:

# 允许 10.184.175.22 访问allow 10.184.175.22;# 允许网段 10.187.144.1-254 访问allow 10.187.144.0/24;# 允许网段 10.189.0.1-10.189.255.254 访问allow 10.189.0.0/16;# 拒绝所有deny all;

然后在 nginx.conf 中引入该配置文件(注意位置是跟 localtion 同级):

    server {        listen 8443;        resolver 10.176.161.63;#DNS        server_name localhost;        proxy_connect;        proxy_connect_allow 443 80;        proxy_connect_connect_timeout 10s;        proxy_connect_read_timeout 10s;        proxy_connect_send_timeout 10s;        include /apps/app/nginx/conf/ip_white.conf;        # 引入白名单配置文件        location / {            proxy_set_header Host $host;            proxy_pass $scheme://$http_host$request_uri;    #设定代理服务器的协议和地址             proxy_buffers 256 4k;            proxy_max_temp_file_size 0k;            proxy_connect_timeout 30;            proxy_send_timeout 60;            proxy_read_timeout 60;            proxy_next_upstream error timeout invalid_header http_502;        }    }

最后在 sbin 目录下重新加载一下配置文件:

./nginx -s reload

黑名单配置跟白名单类似,可参考:

# 拒绝 10.184.175.22 访问deny 10.184.175.22;# 拒绝网段 10.187.144.1-254 访问deny 10.187.144.0/24;# 拒绝网段 123.0.0.1-123.255.255.254 访问deny 123.0.0.0/8;# 允许所有allow all;

七、参考文档

如何使用nginx做正向代理访问外网?

Linux服务器通过Nginx正向代理上网

nginx 正向代理实现上网

nginx 正向代理https配置

来源地址:https://blog.csdn.net/qingquanyingyue/article/details/127445943

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux:Nginx 正向代理实现内网访问互联网

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

编程热搜

目录