前言:

因为公司的某些系统需要访问互联网上的某些功能,每个系统的服务器都开通访问互联网的能力太麻烦并且不方便管理,所以打算只对一台服务器开通访问互联网的能力,并在此服务器基础上搭建 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.gz
unzip 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;  #DNSserver_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.org
curl -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;  #DNSserver_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;# 允许所有
all all;

七、参考文档

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

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

3.nginx 正向代理实现上网

4.nginx 正向代理https配置

Linux:Nginx 正向代理实现内网访问互联网相关推荐

  1. 信创环境下Nginx正向代理实现内网发送邮件

    背景 标题党了,其实不管是不是在信创环境,只要存在网络分区/隔离,我们都可能面临发送邮件的问题: 业务服务要发送邮件但是部署在无法连接互联网的环境A中: Nginx一方面作为静态资源服务,另一方面作为 ...

  2. Proxifier Socks5 代理(内网访问、远程办公)

    适用场景 远程(在家)办公,访问公司内网 资源下载 代理工具 Proxifier: https://pan.baidu.com/s/13NoMcp1F03GXWt90PzsgPA 提取码: 8d3d ...

  3. linux ssh -R 代理不同内网主机互连

    一.搭建SSH方向代理 准备:一台外网主机 两台不同内网的主机 局域网主机(虚拟主机): 192.168.6.233   CentOS 6.7 阿里云服务器:120.25.68.60   CentOS ...

  4. 华为云在Linux ECS上使用obsutil通过内网访问OBS

    obsutil是适用于Windows.macOS和Linux操作系统的命令行工具,支持通过配置内网DNS服务器地址的方式,使在华为云上的Linux ECS通过内网直接访问OBS,下面将介绍其具体操作流 ...

  5. Nginx正向代理与Client设置代理上网

    Nginx的应用场景 http服务器.Nginx是一个http服务可以独立提供http服务.可以做网页静态服务器. 虚拟主机.可以实现在一台服务器虚拟出多个网站.例如个人网站使用的虚拟主机. 反向代理 ...

  6. Nginx正向代理(实现内网(浏览器、终端、Docker)可以访问外网)

    环境:CentOS7.6.Nginx 1.16 说明:nginx正向代理默认只支持http,不支持https,需借助第三方模块"ngx_http_proxy_connect_module & ...

  7. Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站

    喜迎国庆 点击上方蓝字关注"汪宇杰博客" 导语 前几天发了两篇< 能跑就行:Kestrel Hosting 如果你的要求只是临时内网访问,可以只用 Kestrel 来承载 W ...

  8. Nginx实现 内网访问外网https页面资源的解决方案

    项目场景: 在开发过程中,有遇到在内网环境下 需要访问外网 https页面.遇到这个需求也是比较不好做.经过查询资料和调试最终完成功能. 问题描述 解决思路 : 通过 nginx 反向代理来实现 原因 ...

  9. nginx正向代理访问微信接口502错误, Unable to tunnel through proxy. Proxy returns \“HTTP/1.1 502 Bad Gateway\

    问题: nginx正向代理访问微信接口报错502, Unable to tunnel through proxy. Proxy returns "HTTP/1.1 502 Bad Gatew ...

最新文章

  1. matlab加载ascii文件,matlab自动处理ascii文件的方法
  2. Ubuntu10下MySQL搭建Amoeba系列(文章索引)
  3. 在页面中隐藏数据库某信息并显示该信息对应的字典编码名称(后台ssh框架,前台extjs)
  4. AI应用开发实战 - 手写识别应用入门
  5. C4C Adapt menu debugging
  6. Comet OJ(Contest #8)-D菜菜种菜【树状数组,指针】
  7. 【Python】输入任意个数元素并保存至列表
  8. USF MSDS501 计算数据科学中文讲义·翻译完成
  9. 20145307《信息安全系统设计基础》第二周学习总结
  10. php的ftp怎么代理访问,利用PHP登陆FTP实现服务器资源同步 | Lancer's Blog
  11. 身高回归现象是否真的存在?
  12. 动易 当前服务器不允许上传文件,动易网站详细安说明及常见疑难解答.doc
  13. 滑动窗口协议如何实现流量控制
  14. VsCode切换语言
  15. springboot 返回二进制文件流
  16. Git取消add 、 commit、push的命令
  17. 高端餐饮空间布局要点
  18. “嗲”上海文化,女人需要学会的4种气质
  19. Spark 列转行操作
  20. typedef 的使用方法详解、goto语句的使用方法。

热门文章

  1. 【初创公司系列】由软件先驱Tom Siebel支持的机器学习创业公司C3.ai申请IPO
  2. 微软与纳斯达克开展合作将区块链产品整合至纳斯达克服务中
  3. Verilog功能模块——时钟分频
  4. Js高级单利模式理论模型
  5. android录音声波动画,Android开发:仿微信 录音声波
  6. 自然语言处理中的文本聚类
  7. oracle实时异地同步,异地Oracle数据库数据同步
  8. SpringBoot下载Excel文件,解决文件损坏问题
  9. 东郊到家预约系统开发流程
  10. TotalControl之手机录屏神器