论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
使用Nginx正向代理让内网主机通过外网主机访问互联网 ...
使用Nginx正向代理让内网主机通过外网主机访问互联网 ...
自由的羽毛
论坛元老
|
2024-8-24 18:26:00
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1941
|
帖子
1941
|
积分
5823
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目次
环境概述
流程说明
在外网服务器上安装部署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
复制代码
unzip 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命令使其见效
source /etc/profile
复制代码
直接curl https://blog.csdn.net/ 成功访问到 代理成功
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
自由的羽毛
论坛元老
这个人很懒什么都没写!
楼主热帖
JDBC p2 JDBC API
【MySQL】MySQL的安装、卸载、配置、登 ...
【python】标准库(第四讲)
iOS 组件化及二进制化的探索 ...
线程本地存储 ThreadLocal
Vue使用ajax(axios)请求后台数据 ...
.MD语法入门,教你写好readme文档 ...
我眼中的大数据(二)——HDFS ...
Linux【实操篇】—— Shell函数、Shell ...
go学习笔记(一)
标签云
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表