一、Nginx中location匹配优先级

Nginx中location匹配优先级

location支持各种匹配规则,在多个匹配规则下,Nginx对location的处理是有优先级的,

优先级高的规则会优先进行处理;而优先级低的规则可能会最后处理或者不进行处理。

注意,关于location内容的优先级与其所在的顺序无关。

序号Nginx中location匹配优先级说明
1location  = / {        
[ config A ]
}

这个【优先级最高】

= 符号是最高优先级;这里表示【只匹配斜杠 /】 ,那么就执行config A配置。

 2location ^~ /images/ {
[ config B ]
}
^~ 表示【以什么开头】这里表示只要是以images开头的url都执行config B配置。
3location ~* \.(gif|jpg|png|swf)$ {
[ config C ]

~* 表示不区分大小写;

\.(gif|jpg|png|swf)$ 表示以.gif或.jpg或.png或.swf结尾的文件;

都执行config C配置。

注意:\.(斜杠点)表示转义为.(点)

4location  /abc/def {
[ config D ]
}
/abc/def 表示指定/abc/def开头的url前缀,都执行config D配置。
5location  /abc {
[ config E ]
}
/abc 表示指定/abc开头的url前缀,都执行config E配置。
6location  / {
[ config F ]
}

这个【优先级最低】

/ 表示对该网站的所有请求都执行config F配置。

二、Nginx中location的应用示例

Nginx中location应用示例
location主要用于对URL进行匹配。 location支持正则表达式匹配,也支持条件判断匹配。
序号Nginx中location应用实例说明
1

配置解析指定路径下的

指定格式内容

#通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、
#.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理配置,且只解析
#【/data/wwwroot/www.ixdba.net】路径下的内容location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {root    /data/wwwroot/www.ixdba.net;}
2配置解析指定目录
#通过location指令来对网页URL进行分析处理
#(即:将upload和html下的所有文件都交给nginx来处理)
#注意upload和html目录是在/data/wwwroot/www.ixdba.net下的子目录location ~ ^/(upload|html)/  {root    /data/wwwroot/www.ixdba.net;}
3配置解析指定文件类型
#location是对此虚拟主机下动态网页的过滤处理,也就是
#将所有以.jsp为后缀的文件都交给本机的8080端口处理location ~ .*.jsp$ {index index.jsp;proxy_pass http://localhost:8080;}

 1.1、Nginx配置解析指定路径下的指定格式内容

        通过location指令来对网页URL进行分析处理,所有扩展以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理配置,且只解析【/data/wwwroot/www.ixdba.net】路径下的内容详细操作:

《1》将一个图片文件拷贝到【/usr/local/nginx/html】路径下:

《2》此时可以直接在网址后面添加上图片名称即可访问(如:192.168.1.11/5.jpg)如下图所示:

《3》修改Nginx的配置文件【/usr/local/nginx/conf/nginx.conf】新增【配置解析指定路径下的指定格式内容】如下图所示:

《4》nginx的配置文件修改完成后,查询当前运行的nginx父进程PID,然后重启nginx服务让配置生效

#1-查看系统当前运行的nginx服务,且获取到当前运行的nginx父进程PID编号命令
ps -ef | grep nginx#2-不间断nginx业务重启nginx服务,让配置生效命令(若:当前运行的nginx父进程的PID是1513)
kill -HUP 1513

《5》若想继续在网址后面添加上图片名称访问(如:192.168.1.11/5.jpg)则需要将我们的图片内容放置到指定路径下

#1-创建nginx指定存放图片文件的路径
mkdir -p /data/wwwroot/www.ixdba.net#2-进入nginx指定存放图片文件的路径
cd /data/wwwroot/www.ixdba.net/#3-将图片复制到nginx指定存放图片文件的路径
cp -p /usr/local/nginx/html/5.jpg .

        当前【配置解析指定路径下的指定格式内容】的路径下若存放了非图片的内容,在去网页访问该内容时会提示不存在,被过滤掉了,如下图所示:

 1.2、配置解析指定目录

《1》先创建需指定解析的目录

#创建需要nginx指定解析的目录(即【/data/wwwroot/www.ixdba.net/】目录下分别创建upload和html目录)
mkdir -p /data/wwwroot/www.ixdba.net/upload
mkdir -p /data/wwwroot/www.ixdba.net/html

《2》将需要的内容放置到指定的目录下(比如将ck.html放置到【/data/wwwroot/www.ixdba.net/html】目录下)

#如将ck.html文件放置到【/data/wwwroot/www.ixdba.net/html】目录下
cp -p /data/wwwroot/www.ixdba.net/ck.html /data/wwwroot/www.ixdba.net/html/

《3》配置Nginx解析指定路径下的指定目录内容

#通过location指令来对网页URL进行分析处理(即:将upload和html下的所有文件都交给nginx来处理)
#注意upload和html目录是在/data/wwwroot/www.ixdba.net下的子目录location ~ ^/(upload|html)/  {root    /data/wwwroot/www.ixdba.net;}

《4》nginx的配置文件修改完成后,查询当前运行的nginx父进程PID,然后重启nginx服务让配置生效

#1-查看系统当前运行的nginx服务,且获取到当前运行的nginx父进程PID编号命令
ps -ef | grep nginx#2-不间断nginx业务重启nginx服务,让配置生效命令(若:当前运行的nginx父进程的PID是1500)
kill -HUP 1500

        此时重启nginx的进程后再次访问【192.168.1.11/html/ck.html】路径即可访问到这个网页了,如下图所示:

 1.3、配置解析指定类型的文件

《1》配置nginx的配置文件解析指定类型的文件

#location是对此虚拟主机下动态网页的过滤处理,也就是
#将所有以.jsp为后缀的文件都交给本机的8080端口处理location ~ .*.jsp$ {index index.jsp;proxy_pass http://localhost:8080;}

《2》nginx的配置文件修改完成后,查询当前运行的nginx父进程PID,然后重启nginx服务让配置生效

#1-查看系统当前运行的nginx服务,且获取到当前运行的nginx父进程PID编号命令
ps -ef | grep nginx#2-不间断nginx业务重启nginx服务,让配置生效命令(若:当前运行的nginx父进程的PID是1500)
kill -HUP 1500

《3》访问【172.16.213.232/info.jsp】

三、反向代理与正向代理

 3.1、反向代理

  3.1.1、反向代理简介及其配置说明

        反向代理(Reverse Proxy)方式是指通过代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并且将从内部网络服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器【反向代理服务器与Web服务器一般是处于同一网段内的】。当一个代理服务器能够代理外部网络上的访问请求来访问内部网络时,这种代理服务的方式称为反向代理服务。如下图所示:

最简单的反向代理示例
实现反向代理功能的是一个叫做【proxy_pass】的模块,nginx默认已经拥有这个模块了。
序号说明
1
#最简单的反向代理配置示例
server {listen       80;server_name  www.a.com;location / {proxy_pass  http://172.16.213.18;}
}
2

这个最简单反向代理配置实现的功能是:

        当访问www.a.com的时候,所有访问请求都会转发到后端172.16.213.18这个服务器的80端口上。

典型的反向代理服务器配置
#典型反向代理服务器配置
server {listen       80;server_name  www.b.com;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size  4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;proxy_pass  http://172.16.213.77:5601;}
}

这个反向代理实现的功能是:当访问www.b.com的时候,所有访问请求都会转发到后端172.16.213.77这个服务器的5601端口上。与上面那个反向代理实例相比,此反向代理配置增加了一些反向代理属性,这些属性一般用于生产环境下对代理性能要求很高的环境中。

建议:将这些反向代理的配置属性内容单独写到一个文件中,然后在配置文件中引用该文件(include)。

序号反向代理配置项说明
1proxy_redirect off;当上游的Web服务器返回的响应是【重定向】或【刷新请求】时可以重新设置http头关闭。
2proxy_set_header Host $host;设置由后端的Web服务器获取客户端的真实主机名或代理服务器的真实主机名称。
3proxy_set_header X-Real-IP $remote_addr;设置由后端的Web服务器获取客户端的真实IP地址或代理服务器的真实IP地址。
4proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;设置由后端的Web服务器获取客户端的真实 IP 地址以及经过的代理服务器 IP。
5proxy_connect_timeout 90;使用Nginx作为反向代理时,可能会遇到后端Web服务器处理时间超过Nginx设置的超时时间;这里设置为90秒。
proxy_send_timeout 90; Nginx中用于设置向后端Web服务器发送请求数据的超时时间;这里设置为90秒。
proxy_read_timeout 90;Nginx代理服务器从后端Web服务器读取响应的超时时间;这里设置为90秒。
proxy_buffer_size  4k;Nginx 中用于配置代理缓冲区大小的重要参数(主要用于控制从后端服务器读取的初始响应部分(通常是响应头)的缓冲区大小);一般设置为4k。
proxy_buffers 4 32k;

指的是一个请求的缓冲区数量和大小。默认是8 4k|8k。

需要看向缓存什么内容:若是静态资源,则先看看静态资源的平均大小。一般比较大的基本30kb,此时可填4 32k。具体数量和大小,是要根据系统总内存来设置。number x size的值不能太大,因为这个是一个请求的缓冲区大小,设置太大了,当并发请求很多的时候,内存上升很快,就会存在问题了。所以官网默认的是8 4k|8k。

proxy_busy_buffers_size 64k;设置在启用缓冲响应功能后,当写缓冲达到一定大小时,Nginx 会向客户端发送响应的阈值。默认情况下,这个值是 proxy_buffer_size 和 proxy_buffers 指令设置的单块缓冲大小的两倍。
proxy_temp_file_write_size 64k;用于控制临时文件的写入大小。该参数的默认值为8k。
proxy_pass  http://172.16.213.77:5601;反向代理的后端web服务器的IP地址和端口
#反向代理多个Web服务器的配置示例
upstream reverseProxyServer {
server 应用服务器A的IP:8080 weight=10 max_fails=2 fail_timeout=10s;
server 应用服务器B的IP:8080 weight=5 max_fails=2 fail_timeout=10s;
server 应用服务器C的IP:8080 weight=5 max_fails=2 fail_timeout=10s;
}server {
listen 80;
server_name localhost;
location / {proxy_pass http://reverseProxyServer;
}
}

  3.1.2、将反向代理属性内容配置为文件引用

《1》在nginx的配置路径下新增该代理配置属性文件

#1-进入nginx的代理配置路径
cd /usr/local/nginx/conf#2-创建反向代理配置属性内容文件
vi proxy.conf#创建的反向代理配置属性内容
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

《2》修改nginx的主配置文件添加location内容包含反向代理配置属性

#在nginx中添加反向代理属性项的内容location / {proxy_pass http://192.168.1.16:8080;include /usr/local/nginx/conf/proxy.conf;}

《3》在不影响业务的情况下重启nginx服务

#1-查看系统当前运行的nginx服务,且获取到当前运行的nginx父进程PID编号命令
ps -ef | grep nginx#2-不间断nginx业务重启nginx服务,让配置生效命令(若:当前运行的nginx父进程的PID是1513)
kill -HUP 1513

  3.1.3、Nginx反向代理uri的用法

Nginx反向代理uri的用法
序号说明
1
server {server_name www.abc.com;location /uri/ {proxy_pass http://192.168.99.100:8000;}
}

nginx的proxy_pass对于此种情况的处理方式是:

        将location中的uri传递给后端服务器,也就是当客户端访问http://www.abc.com/uri/iivey.html 时,会被反向代理到http://192.168.99.100:8000/uri/iivey.html 进行访问。

2
server {server_name www.abc.com;location /uri/ {proxy_pass http://192.168.99.100:8000/new_uri/;}}

nginx的proxy_pass对于此种情况的处理方式是:

        替换成proxy_pass指令中URL中含有的uri,也就是当客户端访问http://www.abc.com/uri/iivey.html 时,会被反向代理到http://192.168.99.100:8000/new_uri/iivey.html 进行访问。

3
server {server_name www.abc.com;location /uri/ {proxy_pass http://192.168.99.100:8000/;}}

nginx的proxy_pass对于此种情况的处理方式是:

        替换成proxy_pass指令中URL中含有的uri,也就是当客户端访问http://www.abc.com/uri/iivey.html 时,会被反向代理到http://192.168.99.100:8000/iivey.html 进行访问。
这种反向代理方式其实是上面第二种uri代理方式的扩展,这里要重点注意下“proxy_pass http://192.168.99.100:8000/;” 这个url结尾有个“/"和没有”/"的区别。

 3.2、正向代理

        正向代理是指客户端无法直接访问外部的web,需要在客户端所在的网络内架设一台代理服务器,客户端通过代理服务器访问外部的web(需要在客户端的浏览器中设置代理服务器),这就是正向代理【一般情况下客户端与代理服务器在同一网段内】。
正向代理适用于: 
 ①局域网的代理服务器。
②访问某个受限网络的代理服务器,如教育网访问某些国外网站需要找代理。

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

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

相关文章

神经网络正则化三重奏:Weight Decay, Dropout, 和LayerNorm

正则化是机器学习中防止模型过拟合、提升泛化能力的核心技术。Weight Decay、Dropout和LayerNorm是三种最常用的方法,但它们的工作原理和首要目标截然不同。下面的流程图揭示了它们的核心区别与联系: #mermaid-svg-vymek6mFvvfxcWiM {font-family:"…

两台电脑通过网线直连共享数据,设置正确,却互相ping不通的解决方法

因为某些原因,需要两台电脑互传资源,但是某台电脑可能无法连接外网。如果手头有根网线,很容易想到通过一根网线连接两台电脑互传数据。 这里先说一下基本的设置: 两台电脑最好都关闭防火墙;两台电脑都打开专用网络和公…

面试新纪元:无声胜有声,让AI成为你颈上的智慧伙伴

面试,无论是对于面试官还是求职者,都像一场无声的战争。 一方要精准识人,一方要完美自荐;一方怕问不到点子上,一方怕答不到心坎里。 紧张、遗忘、表达失误、准备不足……这些问题几乎每个人都经历过。 有没有一种方…

qt-C++笔记之QtDesigner-Creator按钮图标与样式

qt-C笔记之QtDesigner-Creator按钮图标与样式 整理:如何用 .qrc 管理资源、在 Designer/Creator 中为 QPushButton 设置图标(资源或系统主题),以及用样式表调整文字样式。涵盖 C/Qt 与 PySide/PyQt;Linux 桌面优先&am…

maven 常用指令

Maven 是 Java 项目构建和依赖管理的得力助手。这里为你总结了一些常用指令,希望能帮你提升开发效率。下面这个表格汇总了 Maven 最核心和常用的一些命令:命令主要功能典型使用场景mvn clean清理项目,删除 target 目录及其所有编译输出文件。…

# pdf.js完全指南:构建现代Web PDF查看与解析解决方案

在当今Web开发中,实现高质量的PDF查看功能一直是前端开发者面临的挑战之一。作为最受欢迎的JavaScript PDF库,pdf.js已经成为解决这一问题的行业标准。由Mozilla开发并维护的pdf.js项目,通过纯JavaScript实现PDF解析与渲染,彻底改…

高效对象属性复制工具

日常编程中,经常会碰到对象属性复制的场景,比如 VO、DTO、PO、VO 等之间的转换,关于什么是VO、DTO、PO、VO 等可以看上篇文章,VO、DTO、PO、VO 等对象具体有哪些方式可以使用呢? set/get 方式 性能最好的方式&#x…

大疆图传技术参数对比 你了解多少?

无人机是现代航空技术与智能控制技术结合的产物,已从军事领域广泛渗透至民用场景,成为推动各行业效率升级的关键工具。无人机的全称为 “无人驾驶航空器(Unmanned Aerial Vehicle,简称 UAV)”,简言之&#…

Redis 缓存热身(Cache Warm-up):原理、方案与实践

在 Redis 缓存架构中,“缓存热身”是指在系统正式提供服务前(如重启、扩容后),主动将热点数据加载到 Redis 中的操作。其核心目标是避免**缓存穿透**(请求直达数据库)和**缓存雪崩**(大量请求同…

基于SpringBoot的大学生就业招聘系统

1. 在线演示: 后台:http://springbootiv1oo.xiaobias.com/springbootiv1oo/admin/dist/index.html 前台:http://springbootiv1oo.xiaobias.com/springbootiv1oo/front/index.html 管理员:abo/abo 用户:用户1/123456、…

Java反序列化漏洞揭秘:从原理到攻击实战

一、背景 熟悉接口开发的同学一定知道,能将数据对象很轻松的实现多平台之间的通信、对象持久化存储,序列化和反序列化是一种非常有效的手段,例如如下应用场景,对象必须 100% 实现序列化。 DUBBO:对象传输必须要实现序…

Time-MOE 音频序列分类任务

prompt 我准备做语音疾病分类任务。语音音频是 WAV 格式的音频,基本上分为两类,分别是疾病类和非疾病类。也有少数数据集是多分类,现在我找到了26个数据集,我准备我已经在 MLP CNN 上面测试了它们的基准,下面我找到了一…

[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_测试Qt编译的opencv4.x的库

[嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_测试Qt编译的opencv4.x的库编译Qt-Opencv库测试流程-①创建一个简单的qt-ui工程配置 & 测试配置库编译环境测试代码百度云-工程(opencv4.xqt5.12的工程)参考文档编译Qt-Opencv库 [嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_用Qt…

相较于传统AR矿物鉴定有哪些优势?

与传统的矿物鉴定方法相比,AR矿物鉴定就像是一位全面升级的“超级助手”,展现出了无可比拟的优势。传统的矿物鉴定方法,往往依赖于地质学家或专业鉴定人员的丰富经验。他们需要通过肉眼观察矿物的颜色、光泽、硬度等物理特征,再结…

第5节:分布式文件存储

本节主要是讲解的是分布式文件存储,主要介绍了阿里云OSS云存储和Minio文件存储,本章重点主要是掌握怎么在SpringBoot项目里面接入文件存储。 记录、交流、实践,让每一份付出皆可看见,让你我共同前行😁 1.分布式文件存…

当 GitHub 宕机时,我们如何协作?

一、引言1.1 GitHub 的重要性及宕机影响在当今软件开发的生态系统中,GitHub 已然成为全球开发者不可或缺的核心平台。它为无数开源项目与企业级开发团队提供了高效的代码托管、版本控制、协作开发以及项目管理等服务。然而,2025 年 8 月那场波及全球的 G…

Ansible 常用模块归纳总结

[studentmaster ansible]$ ansible-galaxy collection install http://ansible.example.com/materials/community-general-6.3.0.tar.gz -p collections/##将第三方模块下载到collections下 [studentmaster ansible]$ ansible-galaxy collection install http://ansible.exampl…

计算机网络:概述层---TCP/IP参考模型

🌐 TCP/IP四层模型详解:互联网的核心协议架构深度剖析 📅 更新时间:2025年9月3日 🏷️ 标签:TCP/IP模型 | 互联网协议 | 四层模型 | 计算机网络 | 协议栈 | 网络通信 | 王道考研 摘要: 本文将深入浅出地解析…

打工人日报#20250902

打工人日报#20250902 今天晚上去了玄武湖,来南京三次了,终于来了一次知识点 不确定度 “不确定度” 是测量领域的核心概念,用于量化测量结果的可靠性与分散程度—— 简单来说,它回答了 “这个测量值有多可信?真实值可能…

告别手动复制粘贴:C# 实现 Excel 与 TXT 文本文件高效互转

在日常办公和数据处理工作中,Excel 和 TXT文本文件是两种常见的数据存储格式。Excel文件适合进行复杂的数据分析、公式运算和图表生成,而 TXT文件则更适合用于存储和传输纯文本数据,如日志、配置文件或简单的数据列表。很多时候,我…