使用Nginx正向代理让内网主机通过外网主机访问互联网
目录
环境概述
流程说明
在外网服务器上安装部署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 -ycd /root
wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zipunzip 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-streamdefault_type application/octet-stream;# 使用sendfile系统调用来发送文件,提高性能sendfile on;# HTTP连接的超时时间,这里是65秒keepalive_timeout 65;server {# 服务器监听的端口号为8080listen 8080;# 服务器名称为localhostserver_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-reloadsystemctl start nginxsystemctl 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/ 成功访问到 代理成功
相关文章:
使用Nginx正向代理让内网主机通过外网主机访问互联网
目录 环境概述 流程说明 在外网服务器上安装部署nginx? 安装前准备 下载nginx ?编译安装nginx 开始配置正向代理 创建systemd服务单元文件,用于管理Nginx服务的启动、停止和重新加载 启动nginx ?代理服务器本地验证 ?内网服务器验证 ?将代理地址添…...
蓝桥杯刷题第二天——背包问题
题目描述 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数,N,V&am…...
DM达梦启用及收集AWR报告
1.创建DBMS_WORKLOAD_REPOSITORY系统包 查看DBMS_WORKLOAD_REPOSITORY系统包启用状态 SQL> SELECT SF_CHECK_AWR_SYS;LINEID SF_CHECK_AWR_SYS ---------- ---------------- 1 0SF_CHECK_AWR_SYS 返回值 0:未启用;1:已启…...
【git】如何删除本地分支和远程分支?
1.如何在 Git 中删除本地分支 本地分支是您本地机器上的分支,不会影响任何远程分支。 (1)在 Git 中删除本地分支 git branch -d local_branch_name git branch 是在本地删除分支的命令。-d是一个标志,是命令的一个选项&#x…...
pix2pix mmgeneration通用场景黑白图片上色模型训练,Docker
https://www.dong-blog.fun/post/1924 对于机器学习和深度学习感兴趣的读者来说,OpenMMLab 提供的 MMGeneration 库是一个绝佳的选择。最近我在阅读一篇关于 MMGeneration 的博客文章,尤其是在使用 Docker 环境进行模型和算法测试方面,受益匪浅。以下是我对目标博客内容的概…...
【Redis入门到精通六】在Spring Boot中集成Redis(含配置和操作演示)
目录 Spring Boot中集成Redis 1.项目创建和环境配置 2.基本操作演示 Spring Boot中集成Redis Spring社区也自定义了一套Redis的客户端,与jedis的操作方式有所差异,Spring中把每个类型的操作都单独封装了起来。下面就让我来带大家了解如何在Spring Bo…...
js使用qrcode与canvas生成带logo的二维码
qrcode库 文档 https://www.npmjs.com/package/qrcode 安装 npm i qrcode 使用 errorCorrectionLevel: H // 容错率(H是最高,其它看文档) width: 200 // 大小 margin: 2 // 边距 import QRCode from qrcodeconst testFn async () > {c…...
【STM32】LED状态翻转函数
1.利用状态标志位控制LED状态翻转 在平常编写LED状态翻转函数时,通常利用状态标志位实现LED状态的翻转。如下所示: unsigned char led_turn_flag; //LED状态标志位,1-点亮,0-熄灭/***************************************函…...
FreeRTOS 简介
FreeRTOS 是一个小型、实时操作系统内核,专为嵌入式设备设计。它支持多任务操作、任务优先级、互斥机制和队列管理,是轻量级嵌入式开发中的热门选择。以下是其主要特点: 特点 实时性能:提供确定性的任务调度,适用于对…...
Java并发编程中的synchronized和volatile:用途解析与使用场景
目录 一、synchronized关键字:互斥与同步的保障 二、volatile关键字:轻量级的变量可见性保证 三、synchronized与volatile的区别与选择 四、总结 在Java并发编程中,synchronized和volatile是两个非常重要的关键字,它们在多线程…...
将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)
问题 项目里使用了 AzureBlob 存储了用户上传的各种资源文件,近期 AzureBlob 的流量费用增长很快,想通过分析Blob的日志,获取一些可用的信息,所以有了这个需求:将存储账户的日志(读写,审计&…...
程序设计:排版、检验报告的上下标解决几种办法
【啰嗦两句】 本文重点在于提供几个针对排版文档、各种检验报告系统等程序设计时,遇到的上下标录入、绘制展示等问题的应对办法,但是准确地说,并没有非常优秀的方案。 【上下标难题】 一般的行业或许对上下标并没有严格要求,多数…...
【2024年华为OD机试】 (C卷,100分)- 求字符串中所有整数的最小和(Java JS PythonC/C++)
一、问题描述 题目解析 题目描述 输入字符串 s,输出 s 中包含所有整数的最小和。 说明 字符串 s 只包含 a-z、A-Z、、-。合法的整数包括: 正整数:一个或多个 0-9 组成,如 0、2、3、002、102。负整数:负号 - 开头&…...
MBox20网关:数字化工厂的智能加速器
在当今这个日新月异的数字化时代,企业对于生产效率、数据管理和网络安全的追求已经达到了前所未有的高度。特别是在制造业领域,随着“工业4.0”和“智能制造”概念的深入实践,数字化工厂已成为产业升级的必然趋势。在这场深刻的变革中&#x…...
NodeJS | 搭建本地/公网服务器 live-server 的使用与安装
目录 介绍 安装 live-server 安装方法 安装后的验证 环境变量问题 Node.js 环境变量未配置正确 全局安装的 live-server 路径未添加到环境变量 运行测试 默认访问主界面 访问文件 报错信息与解决 问题一:未知命令 问题二:拒绝脚本 公网配置…...
用C++实现一个基于模板的观察者设计模式
观察者模式 定义 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象状态发生变化时,其所有依赖它的对象都会收到通知并自动更新。 核心概念 角色定义 Subject(被观察者): 持有观察者列表,维护观察者的注册和移除。 …...
LabVIEW开发X光图像的边缘检测
在医疗影像处理中,X光图像的分析对于骨折、肿瘤等病变的检测非常重要。X光图像中包含许多关键信息,然而,由于图像噪声的干扰,直接从图像中提取有用的特征(如骨折的边缘)变得非常困难。边缘检测作为图像处理…...
GitEE
版本控制 cvs svn git 等等 一、团队开发过程中的问题 1、备份【Release】 2、代码还原 3、协同修改 4、多版本文件管理 5、追溯问题代码的编写人和编写时间 6、权限控制 二、版本控制 版本控制就是维护工程蓝图标准做法,能追踪工程蓝图从诞生一直到定案的过程…...
Ubuntu配置python环境
前言 Ubuntu22.04自带python3,仅需要安装pip3即可。 也可以安装Anaconda使用虚拟环境。 本地Python环境 查看python3是否已安装: python3 -V若已安装python3,继续安装pip3: sudo apt install python3-pip查看pip版本…...
数据库的DML
1.insert 数据库于表创建成功后,需要向数据库的表中插入数据。在MySQL中可以使用insert语句向数据库已有的表中插入一行或者多行元组数据 基本语法: insert 语句有两种语法形式,分别是insert…values语句和insert…set语句 insert into&l…...
什么是SSL及SSL的工作流程
什么是 SSL SSL(Secure Sockets Layer,安全套接层)是一种保护互联网通信安全的加密协议,用于确保数据在客户端和服务器之间传输时的保密性、完整性和身份验证。它已被TLS(Transport Layer Security,传输层安全协议)取代,但很多场景仍习惯称其为SSL。 SSL/TLS 的主要目…...
RabbitMQ---消息确认和持久化
(一)消息确认 1.概念 生产者发送消息后,到达消费端会有以下情况: 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除,那么就可能会导致,消息处理异常想要再获取这条消息的时…...
4 AXI USER IP
前言 使用AXI Interface封装IP,并使用AXI Interface实现对IP内部寄存器进行读写实现控制LED的demo,这个demo是非常必要的,因为在前面的笔记中基本都需哟PS端与PL端就行通信互相交互,在PL端可以通过中断的形式来告知PS端一些事情&…...
windows下安装并使用node.js
一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0(LTS长期支持版本)版本的.msi安装包程序 官网下载: 中文网下载: 二、安…...
【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的
SSMS 20在连接Sql server 2022数据库时有如下报错: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…...
VSCode 的部署
一、VSCode部署 (1)、简介 vsCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、版本管理GIT等特性&…...
淘宝、京东联盟数字ID转加密ID接口
该接口可以将主站的数字ID转换为加密ID 例如:123456789 转换为 xxxxxxxxxx-xxxxxxxxx PHP示例 // 接口地址:https://www.haodanku.com/openapi/api_detail?id103 $app_secret 你的appSecret, //替换成自己的 $x [app_id > 你的appid, //替换成…...
【物联网】keil仿真环境设置 keilV5可以适用ARM7
文章目录 一、ARM指令模拟器环境搭建1. keil软件2. Legacy Support 二、Keil仿真环境设置1. 创建一个项目2. 编译器介绍(1)arm-none-eabi-gcc(2)arm-none-linux-gnueabi-gcc(3)arm-eabi-gcc(4)grmcc(5)aarch64-linux-gnu-gcc 3. 安装编译器(1)设置调试 一、ARM指令模拟器环境搭…...
Oracle 可观测最佳实践
简介 Oracle 数据库是一种广泛使用的商业关系数据库管理系统(RDBMS),由甲骨文公司(Oracle Corporation)开发。它支持 SQL 语言,能够存储和管理大量数据,并提供高级数据管理功能,如数…...
上传自己的镜像到docker hub详细教程
上传自己的镜像到docker hub详细教程 本博客通B站视频一致: 上传自己的镜像到docker hub详细教程 1. 登录自己的hub.docker.com的账号 docker hub仓库 2. 点击Repositories,跳转到创建仓库页面 3. 点击Create a repository 创建repository,…...
Python猜数小游戏
Python 实现的《猜数游戏》 介绍 本文将展示如何使用 Python 编写一个简单的《猜数游戏》。这个游戏将会生成一个1到10之间的随机数,用户有最多三次机会来猜测正确的数字。如果用户猜对了,游戏将结束并显示恭喜信息;如果没有猜对࿰…...
HackMyVM-Klim靶机的测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 CVE-2008-0166 四、结论 一、测试环境 1、系统环境 渗透机:kali2021.1(192.168.159.127) 靶 机:debian(192.168.159.27) 注意事…...
MySQL中大量数据优化方案
文章目录 1 大量数据优化1.1 引言1.2 评估表数据体量1.2.1 表容量1.2.2 磁盘空间1.2.3 实例容量 1.3 出现问题的原因1.4 解决问题1.4.1 数据表分区1.4.1.1 简介1.4.1.2 分区限制和执行计划1.4.1.3 分区表的索引1.4.1.4 为什么分区键必须是主键的一部分1.4.1.5 操作分区1.4.1.5.…...
春秋杯-WEB
SSTI 可以看到主页那里有个登录测试之后为ssti {{4*4}} fenjing梭哈即可得到payload {{((g.pop.__globals__.__builtins__.__import__(os)).popen(cat flag)).read()}}file_copy 看到题目名字为file_copy, 当输入路径时会返回目标文件的大小, 通…...
C++多态的认识与理解
多态的定义 多态其实就是同一操作在不同的对象上可以有不同的实现方式。 多态的类型 多态分为静态多态和动态多态两种,而静态多态其实我们之前就了解过,今天主要是讲解一下动态多态。 静态多态(编译时多态):静态多态其实就是在…...
improve-gantt-elastic(vue2中甘特图实现与引入)
1.前言 项目开发中需要使用甘特图展示项目实施进度,左侧为表格计划,右侧为图表进度展示。wl-gantt-mater,dhtmlx尝试使用过可拓展性受到限制。gantt-elastic相对简单,可操作性强,基础版本免费。 甘特图(Gan…...
模型 笛卡尔思维
系列文章分享模型,了解更多👉 模型_思维模型目录。怀疑一切,分析整合,验证真理。 1 笛卡尔思维模型的应用 1.1 笛卡尔思维模型在城市规划中的应用 背景:某城市计划进行新的城市规划,以提高城市的可持续性…...
LabVIEW桥接传感器数据采集与校准程序
该程序设计用于采集来自桥接传感器的数据,执行必要的设置(如桥接配置、信号采集参数、时间与触发设置),并进行适当的标定和偏移校正,最终通过图表呈现采集到的数据信息。程序包括多个模块,用于配置通道、触…...
无人机技术架构剖析!
一、飞机平台系统 飞机平台系统是无人机飞行的主体平台,主要提供飞行能力和装载功能。它由机体结构、动力装置、电气设备等组成。 机体结构:无人机的机身是其核心结构,承载着其他各个组件并提供稳定性。常见的机身材料包括碳纤维、铝合金、…...
飞牛 使用docker部署Watchtower 自动更新 Docker 容器
Watchtower是一款开源的Docker容器管理工具,其主要功能在于自动更新运行中的Docker容器 Watchtower 支持以下功能: 自动拉取镜像并更新容器。 配置邮件通知。 定时执行容器更新任务。 compose搭建Watchtower 1、新建文件夹 先在任意位置创建一个 w…...
【Flink系列】4. Flink运行时架构
4. Flink运行时架构 4.1 系统架构 Flink运行时架构——Standalone会话模式为例 1)作业管理器(JobManager) JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被…...
【机器学习实战入门】使用Pandas和OpenCV进行颜色检测
Python 颜色检测项目 今天的项目将非常有趣和令人兴奋。我们将与颜色打交道,并在项目过程中学习许多概念。颜色检测对于识别物体来说是必要的,它也被用作各种图像编辑和绘图应用的工具。 什么是颜色检测? 颜色检测是检测任何颜色名称的过程…...
C++ K2 (2)
提示:文章 文章目录 前言一、背景标准库基础知识堆栈 总结 前言 前期疑问: 本文目标: 一、背景 接上文 标准库 1、(单选)【STL】在以下容器中间插入一个元素,时间复杂度为O(1)的是(A&#x…...
【React】静态组件动态组件
目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件: 组件第一次渲染完毕后,无法基于内部的某些操作让组件更新「无法实现自更新」;但是,如果调用它的父组…...
Spring Web MVC综合案例
承接上篇文章——Spring Web MVC探秘,在了解Spring Web MVC背后的工作机制之后,我们接下来通过三个实战项目,来进一步巩固一下前面的知识。 一、计算器 效果展示:访问路径:http://127.0.0.1:8080/calc.html 前端代码&a…...
OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数,它基于已知的相机参数和相对位置&am…...
SDL2基本的绘制流程与步骤
SDL2(Simple DirectMedia Layer 2)是一个跨平台的多媒体库,它为游戏开发和图形应用提供了一个简单的接口,允许程序直接访问音频、键盘、鼠标、硬件加速的渲染等功能。在 SDL2 中,屏幕绘制的流程通常涉及到窗口的创建、渲染目标的设置、图像的绘制、事件的处理等几个步骤。…...
计算机网络 (42)远程终端协议TELNET
前言 Telnet(Telecommunication Network Protocol)是一种网络协议,属于TCP/IP协议族,主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议,它允许用户通过终端仿真器连接到远程主机,并在远程…...
重拾Python学习,先从把python删除开始。。。
自己折腾就是不行啊,屡战屡败,最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder,跟matlab最像,也最容易入手。 从VScode上搞python,最后安装到appdata上,安装插…...
51c大模型~合集106
我自己的原文哦~ https://blog.51cto.com/whaosoft/13115290 #GPT-5、 Opus 3.5为何迟迟不发 新猜想:已诞生,被蒸馏成小模型来卖 「从现在开始,基础模型可能在后台运行,让其他模型能够完成它们自己无法完成的壮举——就像一个老…...