nginx正向代理+反向代理

article/2025/9/4 19:05:00

目录

Nginx工作原理及模块介绍​​​​​​​

Nginx原理

负载均衡+反向代理


Nginx WEB服务器最主要就是各种模块的工作,模块从结构上分为核心模块、基础模块和第三方模块,其中三类模块分别如下:
核心模块:HTTP模块、EVENT模块和MAIL模块等;
基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块;
第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块、Limit_req模块等;
Nginx的模块从功能上分为如下三类。
Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改headers信息等操作,Handlers处理器模块一般只能有
一个;
Filters (过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出;
Proxies (代理类模块):此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交
互,实现服务代理和负载均衡等功能。
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件(nginx.conf)将客户
端(用户)的请求映射到一个location block(配置段|区域),而location是Nginx配置中的一个指令,用于匹配用户访问的URL路
径,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx原理

1.Nginx的主要应用类别使用 Nginx 结合FastCGI运行 PHP、JSP 、Perl等程序使用 Nginx 作反向代理、正向代理、负载均衡、规则过滤使用 Nginx 运行静态HTML页、图片使用 Nginx与其他新技术的结合应用
​
2.Nginx的配置文件nginx.conf位于其安装目录的conf目录下
​
3.nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:

Nginx正向代理+反向代理原理

正向代理
1.客户端通过nginx代理服务器,去访问指定请求资源。
2.对于目标服务器来说,客户端的数据请求和IP是看不见的,只能看到代理服务器的请求去访问目标服务器

反向代理
1.指的是客户端去访问代理服务器,因为代理服务器是作用在服务器端的
2.代理服务器再通过反向代理+负载均衡将请求分发多台服务器。
3.反向代理的服务特点是代理服务器,代理的对象是应用服务器,也就是客户端想访问的目标服务器

main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
main块设置的指令将影响其他所有设置;
server块的指令主要用于指定主机和端口;
upstream指令主要用于负载均衡,设置一系列的后端服务器;
location块用于匹配网页位置。
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
server标志定义虚拟主机开始,
listen用于指定虚拟主机的服务端口,
server_name用来指定IP地址或者域名,多个域名之间用空格分开。
index用于设定访问的默认首页地址,
root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。
Charset用于 设置网页的默认编码格式。
access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

虚拟主机

基于域名

virtual host virtual server
把一台物理服务器划分成多个虚拟的服务器,每一个虚拟主机都可以有独立的域名和独立的目录
基于IP的虚拟主机
不同IP对应不同的网站,访问方便,用户可以直接通过IP访问,维护方便,但是一个服务器就需要多个IP地址
基于域名的虚拟主机(IP,端口号相同)
多个网站使用一个IP,通过不同的域名对应不同的网站
基于端口的虚拟主机
多个网站IP相同,通过不同的端口对应不同的网站,节省ip地址
不管是基于哪个部署虚拟主机,另外两个条件相同
nginx -s reload 重新加载配置文件如果不成功
可以直接killall -9 nginx再用nginx开启
基于域名
此配置是基于源码安装的路径
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name  www.xxoo.com;location / {root   /www;index  index.html index.htm;}}#这里是添加了一个指定端口和虚假域名,可以通过域名去本地curl或者去网页IP+端口
因为域名是虚假(虚构)的,所以要去网页验证也是不可行的。除非你有一个自己的真实域名,可以写到配置文件去进行验证。总之 server模块是一个虚拟主机,可以帮助你
虚拟主机在本机是必须要做本地hosts解析的
​
并指定了root根目录下的网页路径
有需要也可以在 listen 加IP:端口,效果是一样的
可以用一个IP指定两个不同的端口,指定不同的网页路径
一个server模块=一个虚拟主机
vi /etc/hosts
192.168.163.20 www.xxoo.com #做hosts解析
​
echo 'nihao' >/www/index.html #输出内容到指定目录下的html文件
curl 指定链接 #验证网页
​
因为虚拟主机是配置文件中的一个模块。
​
​
nginx -t #检查配置文件是否正常
nginx -c /usr/local/nginx/conf/nginx.conf #启动指定配置文件
nginx -s reload #重启nginx服务器
nginx -s stop #关闭nginx

基于端口

基于端口
vi/usr/local/nginx/conf/nginx.conf
​
server {listen      100;   server_name www.kl.xyz;location / {root    /jd;index   index.html index.htm;}}
​
vi /etc/hosts
192.168.163.20 www.kl.com #做hosts解析
​
mkdir /jd
echo 'welcome' >/jd/index.html #输出内容到指定目录下的html文件
​
比如配置了两个模块。指定了不同的端口之后再去指定同一个页面路径或者不同的路径都是可以的。
基于IP地址+端口去访问或者基于域名+端口去访问都是可以的。前提不要把域名注释
​
nginx -t #测试配置文件格式是否正常
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
​
nginx:配置文件/etc/nginx/nginx。conf语法正常
nginx:配置文件/etc/nginx/nginx。conf测试成功

负载均衡+反向代理

1.在源码安转的nginx.conf中server模块上面另起新模块去添加配置。下面的可以全部注释 nginx -t 检测文件格式是否正确
2.负载均衡模块upstream 格式和下面一样即可
3.这里的实验,是nginx作为
​
upstream httpserver {server 192.168.163.60:8080 weight=1;server 192.168.163.20:80 weight=1;server 192.168.163.30:30 weight=1;
}
#添加负载均衡模块。名字要和反向代理模块的要对应
​
​
​
server {location / {root    /html;index   index.html index.htm;proxy_pass http://httpserver;}}
​
1.在location里面添加了一天proxy_pass模块,这就是反向代理模块,除了名字要和负载均衡模块的名字要对应以外,要添加http://.这是必须的
2.负载均衡对应的服务端的应用。要保证应用的数据都是一致的,才能实现高并发请求分均给多台服务端。
3.如果数据不一致,比如有3w个用户同时访问你的同一个资源,你的负载均衡就做不到请求分均了。
4.以上实验是为了更贴切的看出负载均衡的一个效果,并不是生产环境中的实际效果
​

实际上,到这里我是没有写完的,一部分是自己有些东西还是没有得到验证,一部分是时间原因,后续会更新上来的。希望本文章可以帮助到你,如果对你有用,帮我点个赞,支持一下,谢谢~


http://chatgpt.dhexx.cn/article/7tlH1JDK.shtml

相关文章

Nginx 正向代理和反向代理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

详解正向代理与反向代理

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

二叉树-翻转二叉树

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

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

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

二叉树左右子树的翻转

翻转一个二叉树,直观上看,就是把二叉树的每一层左右顺序倒过来。比如问题中的例子,第三层1-3-6-9经过变换后变成了9-6-3-1,顺序反过来就对了。 再仔细观察一下,对于上面的例子,根节点(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.解法 解法思路: 想把二叉树翻转,其实仔细一看,就是把每个二叉树的节点的左右孩子翻转,这样总体效果就是把整个二叉树翻转了。 所以只需要通过一种遍历手段把…

Java 求解翻转二叉树

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

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

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

js 反转二叉树

什么是反转二叉树 二叉树的每个结点至多有两颗子树,不存在大于2个的节点,二叉树有左右之分,次序不能颠倒 初始数据 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…

力扣226:反转二叉树

翻转二叉树 题目思路①思路①代码思路②思路②代码总结 题目 给你一颗二叉树的根节点root&#xff0c;请你翻转该二叉树&#xff0c;并且返回其根节点。 思路① 如何判定二叉树是否翻转&#xff1f; 左右子树需要交换&#xff0c;左右子树内部的左右子节点也需要交换位置。…

翻转二叉树-python

leetCode第226题 翻转二叉树 链接&#xff1a;https://leetcode-cn.com/problems/invert-binary-tree 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,…