论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
物联网
›
物联网
›
使用Nginx正向代理让内网主机通过外网主机访问互联网 ...
使用Nginx正向代理让内网主机通过外网主机访问互联网 ...
干翻全岛蛙蛙
金牌会员
|
12 小时前
|
显示全部楼层
|
阅读模式
楼主
主题
821
|
帖子
821
|
积分
2463
目次
环境概述
流程说明
在外网服务器上安装摆设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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
干翻全岛蛙蛙
金牌会员
这个人很懒什么都没写!
楼主热帖
Mac 上下载安装《鸣潮》详细教程(含更 ...
Android Studio实现一个校园图书管理系 ...
ASP.NET Core依赖注入之旅:针对服务注 ...
批量下载浏览器网页中全部链接的方法 ...
我为什么选择Wiki.js记笔记? ...
ES6案例 ------ 模拟浏览器网页顶部切 ...
类与对象的创建
SQL的函数
Redis笔记总结(狂神说)
MarkDown入门学习总结教程
标签云
挺好的
服务器
快速回复
返回顶部
返回列表