Nginx的正向代理与反向代理


你好呀,我是赵兴晨,文科程序员。

今天,我们将一起了解什么是Nginx的正向代理?什么是Nginx的反向代理?并实际动手实践。

以下内容都是满满的干货,绝对不容错过。我建议先收藏这篇文章,然后找一个安静的角落,慢慢品味和实践。

正向代理:连接互联网的桥梁

在局域网环境中,当需要访问外部互联网资源时,正向代理扮演着至关重要的角色。它像一座桥梁,连接着局域网内的客户端和广阔的互联网世界。

正向代理

正向代理(Forward Proxy)是一种代理服务器,它位于客户端和目标服务器之间。客户端通过代理服务器访问互联网,而不是直接连接到目标服务器。

让我们通过一个实际的例子来理解正向代理的作用

假设你在一个公司的局域网中工作,而公司内只有一台电脑可以访问外部网站。如果每个人都需要上网查找资料,显然不可能让所有人都排队使用这台电脑。这时,将这台电脑设置为代理服务器就是一个明智的选择。其他电脑通过这台代理服务器访问互联网,从而解决了访问限制的问题。

配置与优势

要实现正向代理,需要在代理服务器上进行相应的配置,包括设置监听端口、定义可访问的客户端等。配置完成后,所有局域网内的客户端都可以通过代理服务器安全、高效地访问互联网资源。

使用正向代理的好处包括

• 访问控制:管理员可以控制哪些用户或设备可以访问互联网,以及可以访问哪些网站。
• 缓存和加速:代理服务器可以缓存频繁访问的网页,减少重复的网络请求,提高访问速度。
• 隐私保护:客户端的真实IP地址被隐藏,增加了一定的匿名性。

反向代理:互联网的隐形守护者

在网络架构中,反向代理(Reverse Proxy)扮演着一个关键角色,它为客户端提供了一种无需直接与目标服务器交互的方式来访问资源。客户端对代理的存在毫无感知,这大大简化了访问过程。

反向代理

客户端通过反向代理服务器发送请求,而无需知晓目标服务器的具体位置或配置。反向代理服务器接收请求后,会选择一个合适的目标服务器来获取数据,然后将这些数据返回给客户端。在这个过程中,反向代理服务器对外表现为一个单一的服务器,隐藏了后端服务器的IP地址。

让我们通过一个实际的例子来理解反向代理的作用

想象一下,客户端想要访问一台运行在8001端口的Tomcat服务器。然而,客户端并不需要知道这个真实的端口号。Tomcat服务器为客户端提供了一个9001端口,客户端只需直接访问这个端口即可。至于9001端口如何转发请求到Tomcat服务器的8001端口,这是反向代理服务器的内部工作,客户端无需关心,也无需进行任何额外的配置。

反向代理的优势

使用反向代理的好处是显而易见的

• 简化客户端配置:客户端无需进行复杂的配置,即可直接访问服务。
• 提高安全性:隐藏了后端服务器的真实IP地址,增加了网络的安全性。
• 负载均衡:反向代理可以智能地将请求分发到多个后端服务器,实现负载均衡,提高系统的可用性和可靠性。
• 缓存静态内容:反向代理还可以缓存静态内容,减少对后端服务器的请求,提高访问速度。

正向代理和反向代理区别

正向代理服务器,架设在客户机与目标主机之间,只用于代理内部网络对互联网的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。

正向代理是客户端知道目标服务器在哪里,然后通过代理服务器去访问不能直接访问的目标服务器,而目标服务器并不知道客户端通过什么来访问的,即正向代理代理的是客户端。

反向代理服务器,架设在服务端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

反向代理中,外部网络对于内部网络具体的情况是不可见的,而代理服务器来代理内部网络来返回所要的数据,而服务端知道请求的来源以及数据。反向代理代理的是服务端。

正向代理和反向代理用途

正向代理

• 为在防火墙内的局域网客户端提供访问互联网的途径
• 可以做缓存,加速访问资源
• 对客户端访问授权,上网进行认证
• 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

• 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
• 负载均衡,通过反向代理服务器来优化网站的负载,反向代理服务器根据每个服务器的性能来分配请求,保证服务器负载能在有效范围内

Nginx 实现正向代理:配置与实践

在日常工作和网络配置中,我们通常更多地接触到 Nginx 的反向代理功能。然而,Nginx 同样可以作为正向代理使用,以便在客户端和目标服务器之间进行请求的转发。接下来,我将为你详细介绍 Nginx 正向代理的配置步骤。

正向代理的基本概念

正向代理作为客户端与互联网之间的中介,允许客户端通过代理服务器访问外部资源。客户端需要配置代理服务器的相关设置,以便通过代理进行网络访问。

Nginx 正向代理配置

为了实现 Nginx 的正向代理功能,除了配置转发 HTTP 80 端口的请求外,还需要配置 HTTPS 443 端口的转发。然而,Nginx 官方版本并不直接支持 HTTPS 请求的转发。

ngx_http_proxy_connect_module 模块

幸运的是,阿里云的一位技术专家开发了一个名为 ngx_http_proxy_connect_module 的 Nginx 模块,专门用于处理 HTTPS 请求的转发,并且已经开源。你可以在 https://github.com/chobits/ngx_http_proxy_connect_module 上找到这个模块。

1、安装Nginx1.20.1

以下步骤仅用于实验正向代理

实验环境 centos7.9 root用户操作

# 安装依赖
yum install -y wget unzip patch gcc pcre-devel zlib zlib-devel openssl openssl-devel curl# 下载 nginx1.20.1 源码包
wget https://nginx.org/download/nginx-1.20.1.tar.gz# 下载 ngx_http_proxy_connect_module 模块
wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip# 解压 nginx-1.20.1.tar.gz 和 v0.0.2.zip
tar -zxvf nginx-1.20.1.tar.gz
unzip v0.0.2.zip
mv ngx_http_proxy_connect_module-0.0.2/  ngx_http_proxy_connect_module# 安装
cd nginx-1.20.1# 打补丁
patch -p1 < /root/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1018.patch# 添加模块并安装
./configure --add-module=/root/ngx_http_proxy_connect_module
make && make install# 设置开机自启
vi /etc/systemd/system/nginx.service# 编辑内容如下
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target# 设置开机自启并启动
systemctl enable nginx --now

至此Nginx安装完毕,下面开始配置Nginx的正向代理。

2、修改Nginx配置文件并加载

#正向代理转发http请求
server {#指定DNS服务器IP地址 resolver 114.114.114.114;#监听80端口,http默认端口80listen 80;#服务器IP或域名server_name  localhost;#正向代理转发http请求location / {proxy_pass                 http://$host$request_uri;proxy_set_header           HOST $host;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;}
}#正向代理转发https请求
server {#指定DNS服务器IP地址 resolver 114.114.114.114;#监听443端口,https默认端口443listen 443;#正向代理转发https请求proxy_connect;proxy_connect_allow            443 563;proxy_connect_connect_timeout  10s;proxy_connect_read_timeout     10s;proxy_connect_send_timeout     10s;location / {proxy_pass http://$host;proxy_set_header Host $host;}
}

修改完配置文件之后,对Nginx配置文件进行语法检测并加载配置文件即可

# 对配置文件进行语法检测
/usr/local/nginx/sbin/nginx -t# 加载配置文件
systemctl reload nginx

DNS地址:

• (国外)谷歌:8.8.8.8 developers.google.com
• (国外)OpenDNS:208.67.222.222 signup.opendns.com
• (国内)114:114.114.114.114 www.114dns.com
• (国内)腾讯:119.29.29.29 www.dnspod.cn
• (国内)阿里:223.5.5.5 alidns.com
• (国内)百度:180.76.76.76 dudns.baidu.com

3、验证正向代理

Linux下验证代理服务器是否能正常转发http和https请求

curl http://www.baidu.com/ -v -x 127.0.0.1:80curl https://www.baidu.com/ -v -x 127.0.0.1:443

在这里插入图片描述
在这里插入图片描述

windows10 谷歌浏览器 验证
在这里插入图片描述
在这里插入图片描述

windows按照上图配置完 就可以直接访问 www.baidu.com查资料了,如果无法访问,请检查nginx服务器,防火墙和selinux是否关闭。

好了以上就是今日的分享,回顾一下,今天收获了啥?

• Nginx的正向代理,反向代理
• 正向代理优势,反向代理的优势
• 正向代理和反向代理的区别
• 正向代理和反向代理的用途
• 如何安装Nginx 以及 Nginx正向代理的实践

实践是检验真理的唯一标准。阅读这篇文章可能只是让你在理论上掌握了知识,但真正的理解来自于亲自动手实践。因此,别忘了收藏这篇文章,并且关注我以便你在未来需要时能够轻松找到这些宝贵的资源

另外,如果你觉得今天的内容对你有帮助,不妨点击在看,分享给更多的朋友。一个小小的动作,可能会给他们带来巨大的帮助。

最后,我想说的是:点赞和分享不仅仅是一种美德,更是对未来美好生活的投资。愿每一个点在看的朋友,未来都能收获满满的幸福和成功!

你好,我是赵兴晨,一名文科程序员。我期待在文章下方看到你的留言,让我们一起交流,共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/700853.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.1-2.2

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;优化算法 (Optimization algorithms)2.1 Mini-batch 梯度下降&#xff08;Mini-b…

【科研】常用的实验结果评价指标(2) —— MAE 是什么? !

了解MAE 提示&#xff1a;先说概念&#xff0c;后续再陆续上代码 文章目录 了解MAE前言一、MAE 基本概念1. MAE 是什么&#xff1f;2. MAE 的起源3. MAE 的计算公式 二、MAE的适用场景是什么&#xff1f;三、MAE 的劣势&#xff0c;或 不适用于那些场景或者数据&#xff1f;四、…

一个小调整,竟然让交换机、路由器的CPU占用率降低了50%

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 在信息时代下&#xff0c;不仅仅在网络工程领域&#xff0c;高CPU占用率都是一个非常常见的问题&#xff0c;…

JavaScript中带日期的操作

当我们把日期转换为Number类型的时候&#xff0c;就会变成时间戳&#xff08;毫秒&#xff09; const future new Date(2037, 10, 19, 15, 23); console.log(Number(future)); // console.log(future); //与上行代码等效● 所以我们就可以利用时间戳去做点东西&#xff0c;例…

Spring整合其他技术

文章目录 Spring整合mybatis思路分析Mybatis程序核心对象分析整合Mybatis 代码实现 Spring整合Junit修改成警告 Spring整合mybatis 思路分析 Mybatis程序核心对象分析 上面图片是mybatis的代码&#xff0c;上述有三个对象&#xff0c;分别是sqlSessionFactory&#xff0c;sqlS…

7nm项目之模块实现——02 Placeopt分析

一、Log需要看什么 1.log最后的error 注意&#xff1a;warnning暂时可以不用过于关注&#xff0c;如果特别的warning出现问题&#xff0c;在其他方面也会体现 2.run time 在大型项目实际开发中&#xff0c;周期一般较长&#xff0c;可能几天过这几周&#xff0c;所以这就需要…

Linux - make与makefile

文章目录 什么是make和makefile如何使用依赖关系 和 依赖方法伪目标 写个程序-进度条换行和回车的区别 什么是make和makefile make是一个命令 makefile是一个文件 这就是make和makefile的本质 make和 ll , pwd ,su 一样都是命令 makefile和 test &#xff0c; test.c 一样都是…

【408精华知识】计算机系统结构

感觉教材和网络上对于计算机系统的结构描述都比较模糊&#xff0c;我自己对其进行了总结&#xff0c;并且画出图&#xff0c;不过因为学习的还是不够深入和全面&#xff0c;有的地方肯定是有问题的&#xff0c;烦请大家批评指正&#xff0c;我会进行修改~ 文章目录 零、结构图总…

比大小(打擂台)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明比较大小函数max; int max(int a, int b);int main() {//初始化变量值&#xff1b;int i, n, m, a[10];//填充数组&#xff1b;printf("请输入10个数…

电力系统潮流计算的计算机算法(一)——网络方程、功率方程和节点分类

本篇为本科课程《电力系统稳态分析》的笔记。 本篇为这一章的第一篇笔记。下一篇传送门。 实际中的大规模电力系统包含成百上千个节点、发电机组和负荷&#xff0c;网络是复杂的&#xff0c;需要建立复杂电力系统的同一潮流数学模型&#xff0c;借助计算机进行求解。 简介 …

C++基础语法之数组

一、一维数组 在C中&#xff0c;一维数组是一系列具有相同数据类型的元素的集合。它们在内存中是连续存储的&#xff0c;可以通过索引访问每个元素。 一维数组的声明形式如下&#xff1a; 数据类型 数组名[常量表达式] 例如&#xff1a; // 声明一个能存储10个整数的数组 in…

振弦式应变计的灵敏系数k范围探讨

振弦式应变计是一种广泛应用于工程结构健康监测的重要设备&#xff0c;其灵敏系数k是衡量其性能的关键指标。本文将探讨振弦式应变计的灵敏系数k的一般范围&#xff0c;并分析影响灵敏系数的因素。 一、振弦式应变计的工作原理 振弦式应变计通过测量振弦在受力作用下的振动频率…