Nginx正向代理与反向代理详解

article/2025/9/4 19:01:45

一、介绍

实践中客户端无法直接跟服务端发起请求的时候,我们就需要代理服务。代理可以实现客户端与服务端之间的通信,我们的Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理,此文就来演示一下Nginx配置正向代理和反向代理的场景。

二、正向代理和反向代理的区别

正向代理和反向代理的区别我在知乎上找到两张图可以帮助我们很好的理解:
在这里插入图片描述

在这里插入图片描述

正向代理:客户端 <一> 代理 一>服务端
正向代理简单地打个租房的比方:

A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。
B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。

这个过程中C(服务端)不认识A(客户端)只认识B(代理)
C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。

反向代理:客户端 一>代理 <一> 服务端
反向代理也用一个租房的例子:

A(客户端)想租一个房子,B(代理)就把这个房子租给了他。
这时候实际上C(服务端)才是房东。
B(代理)是中介把这个房子租给了A(客户端)。

这个过程中A(客户端)并不知道这个房子到底谁才是房东
他都有可能认为这个房子就是B(代理)的

由上的例子和图我们可以知道正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。

三、Nginx代理的配置演示

1、正向代理配置场景演示
正向代理很常见,我们的科学上网就是一种正向代理。
我们接下来演示正向代理的这么一个场景。
首先我在我的A服务器的nginx设置访问控制
访问控制之前我访问A下的test.html是这样的:
在这里插入图片描述
我们打开/etc/nginx/conf.d/default.conf
我们加入这么一个判断语句
如果访问A的IP不是118.126.106.11(我的B服务器)则返回403.

location / {if ( $remote_addr !~* "^118\.126\.106\.11") {return 403;}root   /opt/app/demo/html;index  index.html index.htm;}

添加后reload一下nginx再访问test.html:
在这里插入图片描述
此时本地我的浏览器就是被限制了,访问不了该资源。
现在我登录上我的B服务器,打开/etc/nginx/conf.d/default.conf
添加resolver和proxy_pass,设置如下:

server {listen       80;server_name  localhost nginx.tangll.cn;resolver 8.8.8.8;location / {proxy_pass http://$http_host$request_uri;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

resolver为DNS解析,这里填写的IP为Google提供的免费DNS服务器的IP地址
proxy_pass配置代理转发
至此便是配置了B服务器所有访问根一级的请求全部都代理转发对应到 h t t p h o s t http_host httphostrequest_uri去了, h t t p h o s t 就 是 我 们 要 访 问 的 主 机 名 , http_host就是我们要访问的主机名, httphost访,request_uri就是我们后面所加的参数。
简单的说至此就是相当于配置好了我们请求了B服务器,B服务器再去请求我们所请求的地址。

那么接下来我们来看一下结果,我们在本地配置好代理,我这里是mac系统,可以从网络设置中选择高级,然后选择代理
在这里插入图片描述
填入我们B服务器的IP,然后我们来看一下代理是否成功。
我们登录http://www.ip138.com/ 可以看到此时我们的IP地址已经为B服务器的IP,说明代理成功。
在这里插入图片描述

然后我们再来访问一下test.html:
在这里插入图片描述
这不是翻墙

结果证明,此时的客户端已经可以成功访问A服务器的资源。
以上就是正向代理的一个场景演示,这个过程中可以知道,我们客户端是想要A的资源,但是A的资源只有B能拿到,便让B代理去帮助我们访问A的资源。整个过程A只知道B拿了他的资源,并不知道客户端拿到。

2、反向代理配置场景演示
反向代理的演示更为简单一些。
首先在/etc/nginx/conf.d/下新建一个test.conf:

server {listen       8080;server_name  localhost nginx.tangll.cn;location / {root   /opt/app/demo/html;index  index.html index.htm;}error_page   500 502 503 504 404  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

可以看到我server里listen的是8080端口,但是我的服务器本身不对外开放8080端口,只开放了80端口。
所以我们此时访问test.html结果是访问不到的:
在这里插入图片描述

然后我们打开我们的/etc/nginx/conf.d/default.conf
添加proxy_pass设置如下:

server {listen       80;server_name  localhost nginx.tangll.cn;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#设置代理#location ~ /test.html$ {#    proxy_pass http://127.0.0.1:8080;#}error_page   500 502 503 504 404  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

我们设置当匹配test.html结尾的URL时就去代理访问本机的8080端口
为了对比我们先注释掉,然后直接80端口访问一下test.html:
在这里插入图片描述

可以看到此时返回的404。
这时候取消注释我们reload一下nginx然后用80端口访问test.html
在这里插入图片描述

此时便可访问8080端口配置的资源。
以上便是完成了一个反向代理的演示,这个过程中我们可以知道,客户端想要访问的是test.html,但是test.html实际上是8080端口下配置的,中间经过了代理才能拿到。也就是说客户端并不知道中间经历了什么代理过程,只有服务端知道。客户端只知道他拿到了test.html也就是8080端口下配置的资源内容。

四、总结

由上的打比方和演示例子可以体会到正向代理与反向代理的区别和Nginx正向代理和反向代理的简单配置。正向代理和反向代理的区别上边也说过在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。
最后一句话总结此文就是
代理服务器站在客户端那边就是正向代理,
代理服务器站在原始服务器那边就是反向代理,
Nginx通过proxy_pass可以设置代理服务。


http://chatgpt.dhexx.cn/article/plEmsarP.shtml

相关文章

正向代理与反向代理的理解以及区别

正向代理与反向代理 参照了知乎以及百度的一些列子&#xff0c;以下说一下自己的理解 - 正向代理 先搭建一个属于自己的代理服务器 1、用户发送请求到自己的代理服务器 2、自己的代理服务器发送请求到服务器 3、服务器将数据返回到自己的代理服务器 4、自己的代理服务器…

nginx正向代理+反向代理

目录 Nginx工作原理及模块介绍​​​​​​​ Nginx原理 负载均衡反向代理 Nginx WEB服务器最主要就是各种模块的工作&#xff0c;模块从结构上分为核心模块、基础模块和第三方模块&#xff0c;其中三类模块分别如下&#xff1a; 核心模块&#xff1a;HTTP模块、EVENT模块和…

Nginx 正向代理和反向代理

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

什么是正向代理和反向代理

什么是正向代理和反向代理 1. 正向代理2. 反向代理3. 两者的区别 1. 正向代理 正向代理隐藏真实客户端 正向代理&#xff0c;就是一个位于客户端和原始服务器之前的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并且指定目标&#xff08;…

nginx--正向代理、反向代理及负载均衡(图解+配置)

目录 学习背景一、代理服务二、正向代理1.1 什么是正向代理&#xff1f;1.2 如何实现nginx正向代理&#xff1f;1.3 客户端访问&#xff08;验证正向代理&#xff09; 二、反向代理2.1 什么是反向代理&#xff1f;2.2 nginx实现反向代理 三、负载均衡3.1 什么是负载均衡&#x…

正向代理和反向代理详解(纯小白必看 最好懂的白话文教程)

概要 习惯性的bb几句 本文主要介绍正向代理和反向代理的区别&#xff0c;如何区分&#xff0c;各自的好处&#xff0c;还有一些应用场景 主要是白话文的内容&#xff0c;不会有太多专业术语&#xff0c;主要是面向纯小白&#xff0c;做个解疑&#xff0c; 部分地方稍微不严谨&…

nginx代理(正向代理和反向代理)

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标(原始服务器)&#xff0c;然后代理向原始服务器转交请求并将获得的内容返回给客户端&#xff08;目的是为了保护客户端…

反向代理是什么意思?正向代理和反向代理的区别是什么?

一文说清楚正向代理与反向代理的区别 什么是正向代理&#xff1f;什么是反向代理&#xff1f;它们的区别是什么&#xff1f;看完本文就清楚了… 首先&#xff0c;从字面上理解&#xff0c;代理的意思是代替办理&#xff0c;就是一方委托另一方办事&#xff0c;在计算机网络的世…

正向代理和反向代理有什么区别?什么是正向代理?什么是反向代理?正向代理和反向代理详解。

一、正向代理&#xff1a; 当用户想访问某一网址时&#xff0c;用户先访问代理服务器&#xff0c;然后由代理服务器向目标网址发送请求最终将数据返回代理服务器&#xff0c;最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 正向代理它代理了客户端&#xff0c;相…

正向代理和反向代理的区别

套用古龙武侠小说套路来说&#xff0c;代理服务技术是一门很古老的技术&#xff0c;是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件&#xff0c;让其成为一个代理服务器&#xff0c;从而实现代理技术。常用的代理技术分为正向代理、反…

详解正向代理与反向代理

1.正向代理 1.1 概念 正向代理是一个位于客户端和目标服务器之间的代理服务器&#xff08;中间服务器&#xff09;。为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并且指定目标服务器&#xff0c;之后代理向目标服务器转发请求&#xff0…

二叉树-翻转二叉树

题目 思路BFS 使用BFS遍历的时候交换 只需要对原有的BFS遍历时加上交换的代码即可&#xff08;老三行&#xff09;。 public TreeNode invertTree(TreeNode root) {public TreeNode invertTree(TreeNode root) {//root为空的情况要进行排除否则会在交换时出现空指针异常if(r…

力扣周赛 313 反转二叉树的奇数层(dfs镜像遍历 or bfs提取层节点)

题意&#xff1a; 对于一颗给定的二叉树&#xff0c;我们的任务是反转它的所有奇数层的节点的权值 val&#xff08;根节点所在层为第 0 层&#xff09;&#xff0c;操作完后返回根节点 root。 思路&#xff1a; 思路一&#xff1a; dfs 镜像遍历&#xff1a;左子树按照左中…

二叉树左右子树的翻转

翻转一个二叉树&#xff0c;直观上看&#xff0c;就是把二叉树的每一层左右顺序倒过来。比如问题中的例子&#xff0c;第三层1-3-6-9经过变换后变成了9-6-3-1&#xff0c;顺序反过来就对了。 再仔细观察一下&#xff0c;对于上面的例子&#xff0c;根节点&#xff08;root&…

算法-树-反转二叉树

问题 Write a function that takes in a Binary Tree and inverts it. In other words, the function should swap every left node in the tree for its corresponding (mirrored) right node. Each Binary Tree node has a value stored in a property called “value” and …

算法_二叉树_翻转二叉树

文章目录 翻转二叉树1.解法2.总结算法 翻转二叉树 leetcode链接 1.解法 解法思路&#xff1a; 想把二叉树翻转&#xff0c;其实仔细一看&#xff0c;就是把每个二叉树的节点的左右孩子翻转&#xff0c;这样总体效果就是把整个二叉树翻转了。 所以只需要通过一种遍历手段把…

Java 求解翻转二叉树

文章目录 一、题目二、题目分析三、递归法四、非递归法五、层序遍历六、总结一、题目 翻转一棵二叉树。 二、题目分析 题目要求翻转二叉树,其实只需要把每一个节点左右孩子交换(孩子下面的节点是一起交换的)即可 题目使用前序遍历和后序遍历都可,但是中序遍历不可以,因…

【LeetCode 6182 反转二叉树的奇数层】

题目描述 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c;假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] &#xff0c;那么反转后它应该变成 [18,29,11,7,4,3,1,2] 。反转后&#xff0c;返回树的根节点。 完美 二叉…

js 反转二叉树

什么是反转二叉树 二叉树的每个结点至多有两颗子树&#xff0c;不存在大于2个的节点&#xff0c;二叉树有左右之分&#xff0c;次序不能颠倒 初始数据 let list {id: "4",left: {id: "2",left: {id: "1",left: null,right: null,},right: {id: …

层序遍历,反转二叉树,对称二叉树

1.层序遍历 leetcode 一层层遍历二叉树 &#xff0c; 是广度优先搜索 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {queue< TreeNode* > que;vector < vector < int > > result;if ( root NULL ) return result…