使用Nginx正向代理让内网主机通过外网主机访问互联网 ...

打印 上一主题 下一主题

主题 822|帖子 822|积分 2466

目次
环境概述
流程说明
在外网服务器上安装摆设nginx?
安装前预备
下载nginx
?编译安装nginx
开始设置正向代理
创建systemd服务单元文件,用于管理Nginx服务的启动、停止和重新加载
启动nginx
?代理服务器本地验证
?内网服务器验证
?将代理地址添加到环境变量中直接使用

环境概述

在企业网络环境中,通常会存在内网与外网的隔离,内网机器无法直接访问外部Internet。而外网机用具有访问互联网的能力。为了让内网机器能够通过外网机器访问互联网,我们可以设置Nginx正向代理来实现。
(代理服务器为linux系统,Windows系统中nginx中默认不包含proxy_connect模块,Windows编译proxy_connect模块比较贫苦,可以使用CCProxy代理软件实现,参考外网主机使用CCProxy代理使内网主机上网)


  • 内网主机:172.211.216.242 (无法直接访问外部Internet)
  • 外网主机:192.168.0.97 (可以访问Internet,并充今世理服务器)
  • 前置条件:内网主机和外网主机虽然不是在同一网段,但是可以互相访问,正向代理的端口需要互通,这里用的8080
流程说明


  • 内网服务器发送请求:内网服务器通过HTTP或HTTPS发送请求到外网代理服务器的8080端口。
  • 代理服务器接收请求:外网代理服务器接收到请求后,根据请求的协议(HTTP或HTTPS)使用proxy_pass将请求转发到目的互联网服务器。
  • 互联网服务器处理请求:目的互联网服务器接收到请求后处理并天生相应。
  • 代理服务器返回相应:互联网服务器将相应发送回外网代理服务器,然子女理服务器将相应转发回内网服务器。
    代理流程:
    A[内网主机 172.211.216.242] – 请求 --> B[Nginx代理 192.168.0.97:8080]
    B – 转发请求 --> C[目的服务器]
    C – 返回相应 --> B
    B – 返回相应 --> A
    ±---------------------+ ±-----------------------+ ±--------------------+
    | 内网服务器 | | 外网代理服务器 | | 互联网服务器 |
    | 172.211.216.242 | --------> | 192.168.0.97:8080 | --------> | www.example.com |
    | | | | | |
    | 发送HTTP/HTTPS请求 | | 接收并转发请求 | | 处理请求并返回相应 |
    ±---------------------+ ±-----------------------+ ±--------------------+
    ^ | |
    | v |
    ±---------------------<----------------±----------------------<--------------+
在外网服务器上安装摆设nginx

安装前预备

由于Nginx默认不支持HTTPS代理,我们需要额外添加模块。使用的模块是ngx_http_proxy_connect_module。使用模块前需请确保模块和Nginx版本匹配。如图:
我这里有用的是1.20.2版本以是使用proxy_connect_rewrite_1018.patch

可以直接通过下载压缩包,解压之后通过patch下令打入补丁。
  1. #安装patch:
  2. yum install patch -y
  3. cd /root
  4. wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip
  5. unzip v0.0.2.zip
复制代码
下载nginx

  1. cd /root
  2. wget http://nginx.org/download/nginx-1.20.2.tar.gz
  3. #解压
  4. tar xf nginx-1.20.2.tar.gz
  5. #进入nginx目录
  6. cd nginx-1.20.2/
  7. #使用patch命令导入补丁 注意路径是否一致 我是直接在根目录操作的
  8. patch -p1 < /root/ngx_http_proxy_connect_module-0.0.2/patch/proxy_connect_rewrite_1018.patch
复制代码
编译安装nginx

  1. #安装编译工具和库
  2. yum install gcc cmake make cmake unzip ncurses-devel gcc gcc-c++ -y
  3. #配置Nginx编译选项,使其在编译Nginx时包含ngx_http_proxy_connect_module-0.0.2模块
  4. ./configure --prefix=/usr/local/nginx --add-module=/root/ngx_http_proxy_connect_module-0.0.2
  5. #编译和安装Nginx
  6. make && make install
复制代码
开始设置正向代理

  1. cd /usr/local/nginx/conf/
  2. #习惯性备份
  3. cp nginx.conf nginx.conf.bak
  4. #编辑
  5. vi  nginx.conf
复制代码
可以直接参考这个 (可以直接拷贝使用)
  1. # 设置Nginx主进程数量为1,通常在单核服务器上只需要一个主进程
  2. worker_processes  1;
  3. # 每个工作进程能够同时处理的最大连接数
  4. events {
  5.     worker_connections  1024;
  6. }
  7. http {
  8.     # 引入mime.types文件,定义文件扩展名和对应的MIME类型
  9.     include       mime.types;
  10.     # 设置默认的MIME类型为application/octet-stream
  11.     default_type  application/octet-stream;
  12.     # 使用sendfile系统调用来发送文件,提高性能
  13.     sendfile        on;
  14.     # HTTP连接的超时时间,这里是65秒
  15.     keepalive_timeout  65;
  16.     server {
  17.     # 服务器监听的端口号为8080
  18.     listen                           8080;
  19.     # 服务器名称为localhost
  20.     server_name                      localhost;
  21.     # 指定DNS服务器地址为114.114.114.114,禁用IPv6解析
  22.     resolver                         114.114.114.114 ipv6=off;
  23.     # 开启HTTP CONNECT方法支持,用于建立与后端服务器的TCP连接
  24.     proxy_connect;
  25.     # 允许通过代理的端口,这里允许443和80端口
  26.     proxy_connect_allow              443 80;
  27.     # 建立连接的超时时间为10秒
  28.     proxy_connect_connect_timeout    10s;
  29.     # 读取数据的超时时间为10秒
  30.     proxy_connect_read_timeout       10s;
  31.     location / {
  32.         # 将请求转发到代理目标
  33.         proxy_pass $scheme://$http_host$request_uri;
  34.     }
  35. }
  36. }
复制代码
创建systemd服务单元文件,用于管理Nginx服务的启动、停止和重新加载

  1. echo "[Unit]
  2. Description=The NGINX HTTP and reverse proxy server
  3. After=network.target
  4. Wants=network.target
  5. [Service]
  6. Type=forking
  7. PIDFile=/usr/local/nginx/logs/nginx.pid
  8. ExecStartPre=/usr/local/nginx/sbin/nginx -t
  9. ExecStart=/usr/local/nginx/sbin/nginx
  10. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  11. ExecStop=/usr/local/nginx/sbin/nginx -s stop
  12. PrivateTmp=true
  13. [Install]
  14. WantedBy=multi-user.target" | sudo tee /etc/systemd/system/nginx.service
复制代码
启动nginx

  1. systemctl daemon-reload
  2. systemctl start nginx
  3. systemctl enable nginx
复制代码
代理服务器本地验证

  1. curl -I https://blog.csdn.net/ -v -x 127.0.0.1:8080
复制代码
如图 出现"HTTP/1.1 200 Connection Established" 表示代理服务器已经乐成建立了连接


内网服务器验证

  1. curl -I https://blog.csdn.net/ -v -x 192.168.0.97:8080
复制代码
如图 直接curl不通,加上代理地址端口是通的
(这一步要确保内网主机和外网服务器之间端口互通) 可以使用telnet测试


将代理地址添加到环境变量中直接使用

  1. vi /etc/profile
  2. #编辑/etc/profile文件 在最后一行加入
  3. export http_proxy=192.168.0.97:8080
  4. export https_proxy=192.168.0.97:8080
  5. #192.168.0.97:8080 为你的代理服务器ip和端口
复制代码
注意 使用source下令使其生效
  1. source /etc/profile
复制代码
直接curl https://blog.csdn.net/ 乐成访问到 代理乐成


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表