Nginx之正、反向代理

news2024/10/6 8:24:42

什么是代理

A同学在Ai大时代背景下开启他的创业之路,目前他遇到的最大的一个问题就是启动资金,于是他决定去找马云爸爸借钱,可想而知,最后碰一鼻子灰回来了,情急之下,他想到一个办法,找关系开后门,经过一番消息打探,原来A同学的大学老师王老师是马云的同学,于是A同学找到王老师,托王老师帮忙去马云那借500万过来,当然最后事成了。不过马云并不知道这钱是A同学借的,马云是借给王老师的,最后由王老师转交给A同学。这里的王老师在这个过程中扮演了一个非常关键的角色,这就是代理,也可以说是正向代理,王老师代替A同学办这件事,这个过程中,真正借钱的人是谁,马云是不知道的,这点非常关键。

正向代理

我们常用的VPN,一般为正向代理。

正向代理特点为隐藏真实的客户端,服务端不知道请求的客户端是谁,客户端请求的服务都是代理服务器代替请求。

举个例子,国内的用户想要访问 Google 时,会被阻挡。 于是我们可以在国外搭建一台代理服务器(可以访问 Google 的服务器),让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。

当出现多个客户端时,是这样的:

Nginx正向代理配置

通过proxy_pass配置代理地址http://google.com。当我们请求www.example.com将会被转发至http://google.com。

    server {
        server_name www.example.com;
        listen 80;
        location / {
            proxy_pass http://google.com;     #设定代理服务器的协议和地址 
            proxy_set_header HOST $host;
        }
    }

小结

正向代理代理的对象是客户端,正向代理真正服务的是客户端。不论是一对一,还是多对一,客户端与服务端请求的过程始终隐藏了客户端IP,服务端不清楚客户端是谁。

以客户端的角度来看它有以下优点:

  • 可以突破访问限制,由此我们可以访问外网,如:YouTube、Google。它是由客户端控制的代理(想开就开、不想开就不开),做到科学上网

  • 正向代理可以隐藏自己的真实IP,只有代理服务器才能知道客户端的IP

  • 提高访问速度,代理服务器可以缓存资源,当多个用户访问同一资源时,代理服务器直接把缓存的资源返回,没有必要向目标服务器重复请求同一份资源

反向代理

很久以前,老王去饭店吃饭,需要先到饭店,七荤八素点好菜,坐等饭菜上桌,然后大快朵颐,不亦乐乎。

有了第三方订餐外卖平台(代理),老王懒得动身前往饭店,老王打个电话或用APP,先选好某个饭店,再点好菜,外卖小哥会送上门来。

由于某个品牌的饭店口碑特别好,食客络绎不绝涌入,第三方订餐电话也不绝于耳,但是限于饭店接待能力有限,无法提供及时服务,很多食客等得不耐烦了,纷纷铩羽而归,饭店老总看着煮熟的鸭子飞走了,心疼不已。

痛定思痛,老总又成立了几个连锁饭店,形成一个集群,对外提供统一标准的菜品服务,电话订餐电话400-xxx-7777,当食客涌入饭店总台,总台将食客用大巴运到各个连锁店,这样食客既不需要排队,各连锁店都能高速运转起来,一举两得,老总乐开了花,并为此种运作模式,起名为"反向代理"。

在互联网中,单个服务器处理客户端请求能力有限,当客户端发送的请求过多,会造成服务器忙不过来。这时,我们可以设置多个服务器来共同分担请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到差别。我们只需要知道反向代理服务器是谁就好了。如:www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡

当出现多个客户端(多对多)时,是这样的:

Nginx反向代理配置

不考虑复杂的配置,仅仅是完成一个 http 反向代理

nginx.conf配置文件如下:

conf/nginx.conf 是 nginx 的默认配置文件。你也可以使用 nginx -c 指定你的配置件

    
    //省略
    http {
        #连接超时时间
        keepalive_timeout  120;
        tcp_nodelay        on;
    
    
        #设定实际的服务器列表
        upstream my_server{
            server 127.0.0.1:8089;
        }
    
        #HTTP服务器
        server {
            #监听80端口,80端口是知名端口号,用于HTTP协议
            listen       80;
    
            #定义使用www.xx.com访问
            server_name  www.baidu.com;
    
    		#编码格式
    		charset utf-8;
            #反向代理的路径(和upstream绑定),location 后面设置映射的路径
            location / {
                proxy_pass http://my_server;
            }
            
            //省略
        }
    }

上述例子中,代理仅指向一个服务器。然而,网站在实际运营过程中,多数是以集群的方式运行,这时需要使用负载均衡来分流。

    
    //省略
    http {
        keepalive_timeout  120;
        tcp_nodelay        on;
        #设定实际的服务器列表
        upstream my_server{
            #weigth参数表示权值,权值越高被分配到的几率越大
            server 192.168.1.11:80   weight=5;
            server 192.168.1.12:80   weight=1;
            server 192.168.1.13:80   weight=6;
        }
    
        server {
            listen       80;
            server_name  www.baidu.com;
    		charset utf-8;
            location / {
                proxy_pass http://my_server;
            }
            
            //省略
        }
    }

Nginx提供了多种负载均衡策略,这里不再过多描述。

小结

反向代理代理的对象是服务端,反向代理真正服务的是服务端。不论是一对多,还是多对多,客户端与服务端请求的过程始终隐藏了服务端IP,客户端不清楚服务端是谁。

以服务端的角度来看它有以下优点:

  • 隐藏服务端IP

  • 负载均衡,反向代理服务器可以根据负载情况,将请求分发到不同的真实服务器上

  • 安全防护,反向代理服务器可以作为应用层防火墙,为网站提供对基于Web的攻击行为的防护

总结

反向代理与正向代理区别:

  • 正向代理和反向代理面向的服务群体不同,正向代理代理的对象是客户端,反向代理代理的是服务端

  • 正向代理和反向代理中各自的“视野”不同,正向代理下服务端不知道客户端真实IP,反向代理下客户端不清楚服务端真实IP。

参考资料

https://github.com/dunwu/nginx-tutorial
https://zhuanlan.zhihu.com/p/500768064
https://zhuanlan.zhihu.com/p/25707362

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu20.04之VNC的安装与使用

本教程适用于Ubuntu20.04及以下版本,Ubuntu22.04版本或有出入 更多更新的文章详见我的个人博客:【前往】 文章目录 1.安装图形桌面1.1选择安装gnome桌面1.2选择安装xface桌面 2.安装VNC-Server3.配置VCN-Server4.连接VNC5.设置VNC-Server为系统服务&…

STM32 DMA

DMA介绍 DMA,Direct Memory Access,即直接存储器访问。 DMA传输,将数据从一个地址空间复制到另一个地址空间。(内存(程序里定义的数组)->外设(串口、SPI等外设的数据寄存器)、外…

web集群学习--静态网页和动态网页的区别、WEB1.0和WEB2.0的区别、Tomcat安装以及部署jpress应用

1.静态网页和动态网页的区别 1.1概念 静态网页: 由在服务器上提前创建好的HTML文件组成,它的内容在用户请求页面时不会发生改变。当用户访问一个静态网页时,服务器会直接将预先准备好的HTML文件发送给用户的浏览器进行显示。因为静态网页的…

iptables防火墙、filter表控制、扩展匹配、使用iptables配置网络型防火墙、NAT原理、配置SNAT

day05 day05iptables防火墙filter表filter中的三条链环境准备iptables操作验证FORWARD链准备环境配置FORWARD链NAT配置SNAT iptables iptables有多种功能,每一种功能都用一张表来实现最常用的功能是防火墙和NAT从RHEL7开始,默认的防火墙为firewalld&a…

Pandas时序数据分析实践—时序数据集

1. 跑步运动为例,对运动进行时序分析 时序数据是指时间序列数据,是按照时间顺序排列的数据集合,每个数据点都与一个特定的时间戳相关联。在跑步活动中,我们可以将每次跑步的数据记录作为一个时序数据样本,每个样本都包…

C语言隐式类型转换规则 (比较实用)

C语言隐式类型转换规则 语言规定,不同类型的数据需要转换成同一类型后才可进行计算,在整型、实型和 字符型数据之间通过类型转换便可以进行混合运算(但不是所有类型之间都可以进 行转换) 当混合不同类型的变量进行计算时,便可能会…

网络故障监测终端的网络稳定性和可靠性

RTU5028E网络故障监测终端是一款功能强大且方便实用的设备,集合了断网、断电、网线故障报警功能。它支持同时监测多达7台网络设备,可以帮助用户快速定位远程网络设备离线的原因。此外,它还具备自动重启和远程重启网络设备的功能,为…

P3372 【模板】线段树 1 树状数组

题目 思路 第一眼:树状数组暴力,区间和直接用前缀和做 好,70分 看来需要用数学推亿推了 树状数组的区间查询:查分 设 c 1 a 1 , c 2 a 2 − a 1 , c 3 a 3 − a 2 . . . c i a i − a i − 1 c_1a_1,c_2a_2-a_1,c_3a_3-a_2..…

echart常用图表配置

echart常用图表配置 柱状图3D柱状图效果代码 排行榜柱状图效果代码 排行榜反转柱状图效果代码 柱状图 3D柱状图 效果 代码 import { graphic } from echartsconst VALUE Array.from({ length: 24 }, () > Math.floor(Math.random() * (5000 - 1000)) 1000)const CubeLe…

Python:列表(list)与元组(tuple)

列表与元组 列表:list元组:tuple 比较直观的区分:列表是中括号"[ ]“,元组是小括号”( )"元组可以看成列表的只读形式 # 列表 list1 [hello, world] list2 [1, 2, 3, 4, 5] list3 ["a", "b", &…

面试必考精华版Leetcode2130.链表最大孪生和

题目: 代码(首刷看解析 day22): class Solution { public:int pairSum(ListNode* head) {ListNode* slowhead;ListNode* fasthead->next;while(fast->next!nullptr){slowslow->next;fastfast->next->next;}//反转…

二、韦伯定律

二、韦伯定律 定义:即感觉的差别阈限跟随原来刺激量的变化而变化,而且变现为一定的规律性,用公式来表示,就是就是△Φ/ΦC,其中Φ为原刺激量,△Φ为此时的差别阈限,C为常数,又称为韦…

C语言的转义字符

转义字符也叫转移序列&#xff0c;包含如下&#xff1a; 转移序列 \0oo 和 \xhh 是 ASCII 码的特殊表示。 八进制数示例&#xff1a; 代码&#xff1a; #include<stdio.h> int main(void) {char beep\007;printf("%c\n",beep);return 0; }结果&#xff1a; …

腾讯云-宝塔Linux面板首次登陆操作 (精简教程)

购买服务器这里就略过了... 1. 腾讯云-服务器 2. 找到你的服务器, 点击进去 3. 概要 4. 应用管理 1. 面板首页地址 http://ip:面板端口/tencentcloud2. 面板端口 默认为8888&#xff0c;您可以在登录面板后修改面板端口( 提示&#xff1a;请前往防火墙页面放行面板端口)3. 用户…

“数智新应用”不再是口号,看汽车、医药、制造企业如何突出重围?

近日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海前滩香格里拉大酒店成功举行。大会包含上午的主论坛和下午的 4 场平行论坛&#xff0c;并举办了闭门会议、Open Day 等活动。来自金融、零售、制造、医药等行业的客户及合作伙伴带来了超过 23 场主题演讲…

SpringCloud Gateway获取请求响应body大小

前提 本文获取请求、响应body大小方法的前提 : 网关只做转发逻辑&#xff0c;不修改请求、相应的body内容。 SpringCloud Gateway内部的机制类似下图&#xff0c;HttpServer&#xff08;也就是NettyServer&#xff09;接收外部的请求&#xff0c;在Gateway内部请求将会通过Htt…

【第一阶段】kotlin语言引用数据类型

Java语言中有两种数据类型 第一种&#xff1a;基本数据类型 如int double等 第二种&#xff1a;引用数据类型。如String kotlin只有一种数据类型&#xff0c;看起来都是引用数据类型&#xff0c;实际上编译器会在Java字节码中&#xff0c;修改成基本类型 //Java语言中有两种数…

Mr. Cappuccino的第56杯咖啡——Mybatis拦截器

Mybatis拦截器 概述应用场景项目结构实现分页查询其它拦截器的使用 概述 Mybatis允许使用者在映射语句执行过程中的某一些指定的节点进行拦截调用&#xff0c;通过织入拦截器&#xff0c;在不同节点修改一些执行过程中的关键属性&#xff0c;从而影响SQL的生成、执行和返回结果…

6.s081(Fall 2022)Lab2: system calls

文章目录 前言其他篇章参考链接0. 前置准备1. System call tracing (moderate)简单分析Hint 1Hint 2Hint 3Hint 4Hint 5测试 2. Sysinfo (moderate) 前言 好像没啥前言 其他篇章 环境搭建 Lab1:Utilities 参考链接 官网链接 xv6手册链接&#xff0c;这个挺重要的&#xff…

第2集丨Vue 江湖 —— Vue中的一些必备概念

目录 一、Object.defineProperty()1.1 属性描述符1.2 共享属性1.2.1 configurable1.2.2 enumerable 1.3 数据描述符属性1.3.1 value1.3.2 writable 1.4 访问器描述符属性1.4.1 get1.4.2 set1.4.3 注意点 1.5 案例1.5.1 数据描述符1.5.2 访问器描述符 二、Vue 模板语法2.1 插值语…