搭建Nginx正向代理服务器,轻松实现外部网络请求的转发

如何内网nginx正向代理外网,并实现高德地图 通过内网资源(网关)服务器A,访问代理服务器B,实现内网加载高德地图 阅读详情
AI摘要

本文介绍使用Nginx搭建正向代理服务器实现外部网络请求转发。阐述了正向代理原理,指出原生Nginx只支持HTTP正向代理,为支持HTTPS需打补丁和添加模块。还说明了准备环境、下载对应版本Nginx、编译安装模块及配置Nginx文件等步骤。

​
本文将介绍如何使用Nginx搭建一个简单的正向代理服务器,实现外部网络请求的转发。通过设置正向代理,我们可以隐藏真实的服务器地址,提高访问速度,以及增强网络安全性

一、Nginx正向代理简介

正向代理(Forward Proxy)是一种网络服务,它位于客户端和服务器之间,客户端通过正向代理向服务器发送请求,服务器将请求转发给目标服务器,并将目标服务器的响应返回给客户端。正向代理可以隐藏真实的服务器地址,实现客户端对目标服务器的访问。

由于nginx正向代理的功能指令较少,只需要进行简单的配置即可

server {  
    resolver 114.114.114.114;       #指定DNS服务器IP地址  
    listen 8080;  
    location / {  
        proxy_pass http://$http_host$request_uri;
    }  
}  

以上的配置只能访问80 端口的网站,而不能访问https443端口的网站,现在的网站基本上都是https的要解决技能访问http80端口也能访问https443端口的网站,需要置两个SERVER节点,一个处理HTTP转发,另一个处理HTTPS转发,而客户端都通过HTTP来访问代理,通过访问代理不同的端口,来区分HTTP和HTTPS请求。

由于原生 nginx 只支持 http 正向代理,为了 nginx 支持 https 正向代理,可以打 ngx_http_proxy_connect_module 补丁+ ssl 模块支持。

准备环境:

确保系统中安装了编译所需的工具和依赖,例如GCC、make、pcre-devel( pere 库 )、zlib-devel、openssl-devel(https)等。可以通过以下命令安装:

yum install gcc make pcre-devel zlib-devel openssl-devel

1.2.1 下载对应版本的nginx(源码编译)

wget https://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.15.12.tar.gz -C /usr/local/src
cd /usr/local/src
[root@web01 src] ls
nginx-1.20.2  

当前目录ngx_http_proxy_connect_module下包含了一些文件和子目录,这些内容是与Nginx的ngx_http_proxy_connect_module第三方模块相关的。这个模块用于增强Nginx,使其支持HTTP CONNECT方法,从而能够作为正向代理处理SSL/TLS连接,尤其是对HTTPS流量的代理。
下面是列出的各文件和目录的简要说明:

config:这是配置文件,用来定义编译该模块时的一些特定配置或宏定义。 LICENSE:包含该模块的许可协议信息。
ngx_http_proxy_connect_module.c:核心源代码文件,实现了模块的功能。
patch:这个子目录内包含了用于将该模块集成到Nginx源代码的补丁文件,
README.md:自述文件,通常会包含模块的简介、安装指南、配置示例等重要信息。
t:这个子目录可能包含一些测试脚本或示例,用于验证模块功能是否正常工作。 如果打算编译并安装这个模块到Nginx,一般流程包括:
阅读README.md:了解详细的安装步骤、依赖关系以及任何特殊的配置要求。 应用补丁:根据README.md的指导,选择合适的补丁文件,并应用到Nginx源代码中。
配置Nginx:在Nginx的./configure命令中确保指定了该模块,例如,如果模块的配置文件或说明中有特定的–add-module参数,需要在配置时加入。
编译并安装Nginx:执行make和make install命令完成编译和安装。
配置Nginx配置文件:在Nginx的配置文件(如nginx.conf)中,根据模块的文档添加相应的配置指令以启用和配置HTTP
CONNECT代理功能。

[root@web01 src] yum install git
[root@web01 src] git clone https://github.com/chobits/ngx_http_proxy_connect_module
[root@web01 src] cd nginx-1.20.2
[root@web01 nginx-1.20.2] ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  ngx_http_proxy_connect_module  objs  README  src

​1.2.3 使用https代理模块对源代码修改,选择增加模块需要打补丁的版本
![在请添加图片描述
对 nginx 源码修改,这一步很重要,不然后面的 make 过不去

[root@web01 patch] patch -d /usr/local/src/nginx-1.20.2 -p 1 < /usr/local/src/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1018.patch
patching file src/http/ngx_http_core_module.c
patching file src/http/ngx_http_parse.c
patching file src/http/ngx_http_request.c
patching file src/http/ngx_http_request.h
patching file src/http/ngx_http_variables.c

1.2.4 源码安装
指定安装的路径和关联的模块并且增加所需的模块

[root@web01 nginx-1.20.2] ./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-file-aio --with-http_realip_module \
--add-module=/usr/local/src/ngx_http_proxy_connect_module/
[root@web01 nginx-1.20.2] make
[root@web01 nginx-1.20.2] make install

查看安装情况:

[root@web01 ~] tree /usr/local/nginx/
/usr/local/nginx/
├── conf
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf       # nginx主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── html
│   ├── 50x.html
│   └── index.html
├── logs
└── sbin
    └── nginx    #  Nginx 的二进制可执行文件,这是通过源码编译得到的 nginx 可执行程序,可以直接在这个目录下通过 ./nginx 命令启动 Nginx 服务器

查看版本信息:

[root@web01 ~] /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.20.2
built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC) 
built with OpenSSL 3.0.7 1 Nov 2022
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module 
--with-http_ssl_module --with-file-aio 
--with-http_realip_module --add-module=/usr/local/src/ngx_http_proxy_connect_module/

修改nginx的主配置文件

[root@web01 ~] vim /usr/local/nginx/conf/nginx.conf
 server {
        listen 8787;
        resolver  223.5.5.5 114.114.114.114 valid=300s;
        resolver_timeout 10s;
        proxy_connect;
        proxy_connect_allow 443 80;
        proxy_connect_connect_timeout 10s;
        proxy_connect_read_timeout 10s;
        proxy_connect_send_timeout 10s;

        location / {
                proxy_set_header Host $host;
                proxy_pass $scheme://$http_host$request_uri;
                proxy_buffers 256 4k;
                proxy_max_temp_file_size 0k;
                proxy_connect_timeout 30;
                proxy_send_timeout 60;
                proxy_read_timeout 60;
                proxy_next_upstream error timeout invalid_header http_502;
        }
    }


   listen 8787; 表示服务器监听8787端口接收请求。 resolver 8.8.8.8;   
   配置DNS解析器,使用Google的公共DNS服务器进行域名解析。 proxy_connect;   
   开启代理连接模块,通常用于处理HTTPS代理。 proxy_connect_allow 443 563;   
   允许代理连接到443(HTTPS标准端口)和563(通常用于某些加密的实时通信协议)端口   
   proxy_connect_connect_timeout 10s;, proxy_connect_read_timeout 10s
   proxy_connect_send_timeout 10s; 分别设置了HTTPS代理连接的建立、读取和发送超时时间,均为10秒
   location / { ... } 匹配所有请求,并使用proxy_pass指令将请求代理到相同方案(HTTP或HTTPS)、相同主机和相同URI的地址

请注意,proxy_pass语句中使用的变量$scheme, $http_host和$request_uri是从请求中捕获的,这样可以保持原始请求的完整性,当转发请求到后端时,这些变量将被替换为实际的请求值。
[root@web01 ~] nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动命令

nginx -c /usr/local/nginx/conf/nginx.conf   
or
systemctl start nginx 
or
nginx -s reload
用Nginx做端口转发(反向代理) 本文中,我们介绍Nginx如何做端口转发,还有各种转发规则。 阅读详情

相关推荐

Nginx 基本概念深度解析:从服务器特性到代理模式应用​

在现代网络服务架构中,Nginx 是一个绕不开的关键角色。它以自由、开源的特性,成为众多开发者和企业构建高性能网络服务的首选。深入理解 Nginx 的基本概念,是掌握其强大功能、实现高效应用的基础。下面,我们将对 Nginx 的核心特性,以及正向代理、反向代理等重要概念进行详细解读。一、Nginx:高性能 HTTP 服务器与反向代理的基石Nginx 诞生于 2004 年,由俄罗斯工程师 Igor Sysoev 开发,旨在解决当时服务器在高并发场景下的性能瓶颈问题。

_abab的专栏 966

Nginx常用配置及代理转发

Nginx常用配置及各种转发配置

qq_45349018的博客 4万+

django、flask和tornado区别

今天我们来讨论一下、django、flask和tornado的部署对比: 1. 概述 在python的web开发框架中,目前使用量最高的几个是django、flask和tornado, 经常会有人拿这几个对比,相信大家的初步印象应该是 django大而全、flask小而精、tornado性能高。 tornado性能比django和flask高很多是因为tornado在底层io处理机制上和djang...

程序员八阿哥 3347

Nginx常见场景代理转发配置

注意:本文出自 “阿飞”的博客 ,如果要转载本文章,请与作者联系! 并注明来源:http://blog.youkuaiyun.com/faye0412/article/details/75200607 在这里分享的不是nginx的配置文件说明,而是nginx常用的转发代理配置(比如线上多域名配置,后端各种转发代理配置以及较为复杂的代理转发配置),另外还会对常用的转发代理参数配置进行说明...

阿飞的专栏 20万+

nginx代理配置根据ip地址来转发到不同的地址端口

1.yum search nginx-module 先查找是否有geoip模块 2.安装geoip模块: yum install nginx-module-geoip* 3.安装geoip安装。 yum install geoip-devel 4.配置nginx.conf 添加模块load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so; 配置数据源:geoip_country /usr/share/Geo...

yolo模型训练找我,AI游戏合作找我 5041

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 573

nginx

nginx的简介

2302_81706948的博客 1035

车载摄像头+max96712 + rk3568 调试过程中遇到的问题

本文主要讲述本人在调试rk3568通过mipi-csi2链接max967812,max96712再外接4路车载摄像头过程中遇到的问题,以及最终如何解决这些问题。图中会贴上很多重要且关键的波形图,以便读者在调试过程中进行比对,分析。 如果在调试过程中,mipi总线上的波形没得什么问题的话,还是抓图失败的情况下,需要着重检查 频率,lane数,摄像头分辨率,摄像头输入图像格式等重要配置。

Amelio Ming 2065

了解正向代理服务器:功能与用途

我们通常使用 NGINX 或 Apache 作为负载均衡器和反向代理服务器,即便外部网络流量需通过这类软件转发,才能抵达内网中的实际服务。存在反向代理的同时,也有正向代理,下面我们来深入探讨它们的功能。

雪兽软件 996

数据结构之栈(Stack)的实现详解

堆栈是一种线性数据结构,其插入新元素和删除现有元素都发生在堆栈的顶部。栈(Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。栈类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。

swadian2008的博客 3812

Nginx的使用

本文介绍了nginx的基础使用。

cwtlw的博客 1236

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

【Nginx】ngx_http_upstream_module

1.一些概念 1.反向代理与反向代理服务器 反向代理的方向与正向代理相反,指代表外部网络用户向内部服务器发出请求,即接收来自Internet上用 户的连接请求,并将这些请求转发给内部网络上的服务器,然后将从内部服务器上得到的响应返回给 Internet上请求连接的客户:执行反向代理服务的服务器称为反向代理服务器,反向代理服务器对外部用 户表现为一个服务器. 2.负载均衡(load balancer) 负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服

Edidaughter的博客 1162

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1911

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1376

django、flask和tornado的部署对比:

今天我们来讨论一下、django、flask和tornado的部署对比: 1. 概述 在python的web开发框架中,目前使用量最高的几个是django、flask和tornado, 经常会有人拿这几个对比,相信大家的初步印象应该是 django大而全、flask小而精、tornado性能高。 tornado性能比django和flask高很多是因为tornado在底层io处理机制上和dj...

王冠hurt的博客 3768

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!

1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。 特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径 2. 基本概念 在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进...

淡定_蜗牛的博客 625

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

淘宝为什么能抗住90秒100亿?软件测试工程师必看!

本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。

2401_88779610的博客 747

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LVS 原理详解

lvs 原理详解,包括四种工作模式(NAT模式、DR模式、TUN模式、FullNet模式)、负载均衡算法(静态、动态、新增)

a_2373179473的博客 2047

Nginx 配置实现请求转发功能

1、找到配置文件 2、文件说明 #开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #进程号保存文件 #pid logs/nginx.pid; #每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024 e

优快云_Admin0的博客 5万+

Nginx 实现端口转发

Nginx 实现端口转发

qq_36306519的博客 2万+

Nginx03 -- 代理转发

Nginx 教程,Nginx 系列,Nginx 代理转发

fengxianaa的博客 4570

Nginx请求转发

1.简介​​​​​​ Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度,京东新浪、网易、腾讯、淘宝等 2.安装nginx 下载后解压到相应的路径中即可,不建议有路径中有中文。 然后再根据具体要求更改配置文件, 启动nginx 进入nginx-1.12.2目录中,cmd打开,命令nginx

qq_41950447的博客 1万+
上一篇: Python总结之(Linux系统Python安装并设置Pyenv和Virtulenv环境)
Road_to_programmers
博客等级 码龄9年 57粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值