目次
环境概述
流程说明
在外网服务器上安装部署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命令打入补丁。
- #安装patch:
- yum install patch -y
复制代码- cd /root
- wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip
复制代码 下载nginx
- cd /root
- wget http://nginx.org/download/nginx-1.20.2.tar.gz
复制代码- #解压
- tar xf nginx-1.20.2.tar.gz
- #进入nginx目录
- cd nginx-1.20.2/
- #使用patch命令导入补丁 注意路径是否一致 我是直接在根目录操作的
- patch -p1 < /root/ngx_http_proxy_connect_module-0.0.2/patch/proxy_connect_rewrite_1018.patch
复制代码 编译安装nginx
- #安装编译工具和库
- yum install gcc cmake make cmake unzip ncurses-devel gcc gcc-c++ -y
- #配置Nginx编译选项,使其在编译Nginx时包含ngx_http_proxy_connect_module-0.0.2模块
- ./configure --prefix=/usr/local/nginx --add-module=/root/ngx_http_proxy_connect_module-0.0.2
- #编译和安装Nginx
- make && make install
复制代码 开始配置正向代理
- cd /usr/local/nginx/conf/
- #习惯性备份
- cp nginx.conf nginx.conf.bak
- #编辑
- vi nginx.conf
复制代码 可以直接参考这个 (可以直接拷贝使用)
- # 设置Nginx主进程数量为1,通常在单核服务器上只需要一个主进程
- worker_processes 1;
- # 每个工作进程能够同时处理的最大连接数
- events {
- worker_connections 1024;
- }
- http {
- # 引入mime.types文件,定义文件扩展名和对应的MIME类型
- include mime.types;
- # 设置默认的MIME类型为application/octet-stream
- default_type application/octet-stream;
- # 使用sendfile系统调用来发送文件,提高性能
- sendfile on;
- # HTTP连接的超时时间,这里是65秒
- keepalive_timeout 65;
- server {
- # 服务器监听的端口号为8080
- listen 8080;
- # 服务器名称为localhost
- server_name localhost;
- # 指定DNS服务器地址为114.114.114.114,禁用IPv6解析
- resolver 114.114.114.114 ipv6=off;
- # 开启HTTP CONNECT方法支持,用于建立与后端服务器的TCP连接
- proxy_connect;
- # 允许通过代理的端口,这里允许443和80端口
- proxy_connect_allow 443 80;
- # 建立连接的超时时间为10秒
- proxy_connect_connect_timeout 10s;
- # 读取数据的超时时间为10秒
- proxy_connect_read_timeout 10s;
- location / {
- # 将请求转发到代理目标
- proxy_pass $scheme://$http_host$request_uri;
- }
- }
- }
复制代码 创建systemd服务单元文件,用于管理Nginx服务的启动、停止和重新加载
- echo "[Unit]
- Description=The NGINX HTTP and reverse proxy server
- After=network.target
- Wants=network.target
- [Service]
- Type=forking
- PIDFile=/usr/local/nginx/logs/nginx.pid
- ExecStartPre=/usr/local/nginx/sbin/nginx -t
- ExecStart=/usr/local/nginx/sbin/nginx
- ExecReload=/usr/local/nginx/sbin/nginx -s reload
- ExecStop=/usr/local/nginx/sbin/nginx -s stop
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target" | sudo tee /etc/systemd/system/nginx.service
复制代码 启动nginx
- systemctl daemon-reload
- systemctl start nginx
- systemctl enable nginx
复制代码 代理服务器本地验证
- curl -I https://blog.csdn.net/ -v -x 127.0.0.1:8080
复制代码 如图 出现"HTTP/1.1 200 Connection Established" 表当代理服务器已经成功建立了毗连
内网服务器验证
- curl -I https://blog.csdn.net/ -v -x 192.168.0.97:8080
复制代码 如图 直接curl不通,加上代理所在端口是通的
(这一步要确保内网主机和外网服务器之间端口互通) 可以使用telnet测试
将代理所在添加到环境变量中直接使用
- vi /etc/profile
- #编辑/etc/profile文件 在最后一行加入
- export http_proxy=192.168.0.97:8080
- export https_proxy=192.168.0.97:8080
-
- #192.168.0.97:8080 为你的代理服务器ip和端口
复制代码 注意 使用source命令使其见效
直接curl https://blog.csdn.net/ 成功访问到 代理成功
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |