【DevOps】深入理解 Nginx Location 块:配置示例与应用场景详解
目录
一、location 块的基本概念
二、location 块的语法
三、location 块的匹配方式
四、location 块的优先级
五、location 块的应用场景
六、location 块的嵌套
七、location 块的指令
八、示例配置
Nginx 是一个高性能的 Web 服务器和反向代理服务器,它广泛用于托管网站、服务 API 和负载均衡。在 Nginx 的配置中,location
块是一个非常重要的概念,它允许你根据请求的 URI(统一资源标识符)来匹配和处理客户端请求。
一、location
块的基本概念
location
块用于在 Nginx 配置文件中定义一个位置匹配规则。当客户端发送请求时,Nginx 会根据请求的 URI 来匹配 location
块,并执行相应的处理指令。location
块可以嵌套在 server
块中,也可以嵌套在其他 location
块中。
二、location
块的语法
location
块的基本语法如下:
location [修饰符] <匹配模式> {# 处理指令
}
- 修饰符:可选的修饰符,用于指定匹配方式,如
=
(精确匹配)、~
(区分大小写的正则表达式匹配)、~*
(不区分大小写的正则表达式匹配)等。 - 匹配模式:用于匹配请求 URI 的字符串或正则表达式。
三、location
块的匹配方式
Nginx 支持多种 URI 匹配方式:
-
前缀匹配:默认的匹配方式,不带修饰符,匹配 URI 的前缀。
location /api {# 处理 /api 及其子路径的请求 }
-
精确匹配:使用
=
修饰符,仅当请求 URI 与指定字符串完全相等时匹配。location = / {# 仅处理根路径 / 的请求 }
-
正则表达式匹配:使用
~
或~*
修饰符,分别表示区分大小写和不区分大小写的正则表达式匹配。location ~* \.(jpg|png|gif)$ {# 处理所有以 .jpg、.png 或 .gif 结尾的请求 }
-
目录匹配:以斜杠
/
结尾的匹配模式,用于匹配特定的目录。location /images/ {# 处理 /images/ 目录下的请求 }
四、location
块的优先级
当有多个 location
块匹配同一个请求时,Nginx 会根据以下规则来确定使用哪个 location
块:
- 首先检查是否有精确匹配 (
=
)。 - 如果没有,检查是否有带有正则表达式的匹配 (
~
或~*
),并使用第一个匹配的规则。 - 如果没有正则表达式匹配,则使用最长的前缀匹配。
五、location
块的应用场景
location
块可以用于多种场景,以下是一些例子:
-
静态资源服务:
location /static/ {alias /usr/share/nginx/html/static/; }
这个
location
块用于服务/usr/share/nginx/html/static/
目录下的静态文件。 -
代理转发:
location /api/ {proxy_pass http://backend_server; }
所有以
/api/
开头的请求都会被代理到后端服务器。 -
错误页面重定向:
error_page 404 /404.html; location = /404.html {root /usr/share/nginx/html;internal; }
当发生 404 错误时,Nginx 会重定向到
/404.html
页面。 -
基于请求方法的处理:
location /api {if ($request_method = POST) {rewrite ^ /api/post last;} } location /api/post {# 处理 POST 请求 }
根据请求方法的不同,将请求重写到不同的
location
块进行处理。 -
限制访问:
location /restricted/ {allow 192.168.1.0/24;deny all; }
这个
location
块限制只有来自特定 IP 范围的请求才能访问/restricted/
路径。
六、location
块的嵌套
location
块可以嵌套,这意味着你可以在一个 location
块内部定义另一个 location
块。这通常用于对特定的路径进行更细粒度的控制。
location / {# 默认处理location /admin {# 对 /admin 路径的特殊处理location ~ \.php$ {# 对 /admin 路径下 PHP 文件的处理}}
}
在这个例子中,/admin
路径下的请求首先匹配外层的 location /
,然后进一步匹配内层的 location /admin
,如果请求的文件以 .php
结尾,则还会匹配最内层的 location ~ \.php$
。
七、location
块的指令
在 location
块内部,你可以使用各种指令来控制请求的处理方式,例如:
proxy_pass
:将请求代理到后端服务器。rewrite
:重写请求的 URI。try_files
:尝试不同的文件或路径,直到找到一个存在的。root
和alias
:设置请求文件的基本目录。index
:指定目录索引文件。autoindex
:启用或禁用目录列表。error_page
:定义错误页面。auth_basic
和auth_basic_user_file
:设置 HTTP 基本认证。
八、示例配置
下面是一个完整的 Nginx 配置示例,展示了如何使用 location
块:
server {listen 80;server_name example.com;# 网站根目录root /var/www/html;# 处理根路径location = / {index index.html;}# 处理静态资源location /static/ {alias /var/www/static/;}# 代理到后端应用服务器location /api/ {proxy_pass http://backend_server;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_set_header X-Forwarded-Proto $scheme;}# 处理 PHP 文件location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;}# 自定义错误页面error_page 404 /404.html;location = /404.html {root /var/www/html;internal;}
}
在提供的示例配置中,我们定义了一个 server
块,它包含了多个 location
块,每个 location
块都有特定的用途和配置指令。下面详细讲解每个部分的作用:
server {listen 80;server_name example.com;# 网站根目录root /var/www/html;# 处理根路径location = / {index index.html;}
listen 80;
:指定 Nginx 监听 HTTP 请求的端口号,这里是 80 端口,即标准的 HTTP 端口。server_name example.com;
:定义服务器名,当客户端请求的 Host 头部与这个名称匹配时,就会使用这个server
块的配置。root /var/www/html;
:设置网站的根目录,所有未命名的location
块(即默认的location /
)都会从这个目录下寻找资源。location = / { ... }
:这个location
块精确匹配根路径/
,并且配置了index index.html;
,这意味着当访问根路径时,Nginx 会自动寻找/var/www/html
目录下的index.html
文件来响应请求。
# 处理静态资源location /static/ {alias /var/www/static/;}
location /static/ { ... }
:这个location
块用于处理所有以/static/
开头的请求。alias /var/www/static/;
:将请求的 URI 替换为指定的路径,也就是说,所有对/static/
的请求都会映射到实际的目录/var/www/static/
。
# 代理到后端应用服务器location /api/ {proxy_pass http://backend_server;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_set_header X-Forwarded-Proto $scheme;}
location /api/ { ... }
:这个location
块用于处理所有以/api/
开头的请求。proxy_pass http://backend_server;
:将所有匹配的请求代理到名为backend_server
的后端服务器。通常,backend_server
需要在http
或upstream
块中定义。proxy_set_header Host $host;
:设置代理请求的Host
头部为客户端的原始请求中的Host
值。proxy_set_header X-Real-IP $remote_addr;
:设置X-Real-IP
头部为客户端的 IP 地址。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
:设置X-Forwarded-For
头部,这是一个用于标识请求来源的链式头部,可以追踪请求穿过多个代理的路径。proxy_set_header X-Forwarded-Proto $scheme;
:设置X-Forwarded-Proto
头部为请求使用的协议(http
或https
)。
# 处理 PHP 文件location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;}
location ~ \.php$ { ... }
:这个location
块使用正则表达式匹配所有以.php
结尾的文件。include snippets/fastcgi-php.conf;
:包含一个外部配置文件,通常这个文件包含了处理 PHP 文件所需的 FastCGI 参数。fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
:指定 FastCGI 传递的目标,这里是 PHP-FPM 监听的 Unix Socket 文件。
# 自定义错误页面error_page 404 /404.html;location = /404.html {root /var/www/html;internal;}
}
error_page 404 /404.html;
:定义当发生 404 错误时,Nginx 应该返回哪个页面。location = /404.html { ... }
:这个location
块精确匹配/404.html
路径。root /var/www/html;
:设置/404.html
文件的根目录,因为这是一个内部重定向,所以需要明确指定根目录。internal;
:标记这个location
块只能从内部重定向访问,而不能直接通过外部请求访问。
通过这样的配置,Nginx 可以根据请求的不同部分(如 URI、文件扩展名等)来决定如何处理请求,无论是返回静态文件、代理到后端应用服务器,还是处理脚本文件,都能得到妥善的处理。
通过 location
块的灵活配置,Nginx 可以高效地处理各种类型的请求,无论是静态资源、动态内容还是代理转发,都能轻松应对。
相关文章:
【DevOps】深入理解 Nginx Location 块:配置示例与应用场景详解
目录 一、location 块的基本概念 二、location 块的语法 三、location 块的匹配方式 四、location 块的优先级 五、location 块的应用场景 六、location 块的嵌套 七、location 块的指令 八、示例配置 Nginx 是一个高性能的 Web 服务器和反向代理服务器,它广…...

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十一)
本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 我们,继续讲一…...
未来机器人的发展方向
未来机器人的发展方向是多元化且充满潜力的。以下是一些主要的发展方向: 人工智能与机器学习的集成:随着人工智能(AI)和机器学习(ML)技术的不断进步,机器人将变得更加智能化和自主化。这些技术将…...
美国硅谷高防服务器有哪些优势
美国硅谷高防服务器是位于美国硅谷的,具备高级防护能力的服务器。这种服务器针对网络安全威胁提供了增强的保护措施,以确保数据的安全和业务的连续性。Rak部落小编为您整理发布美国硅谷高防服务器有哪些优势。 具体介绍如下: 1. 安全性&#…...

Django介绍:探索Python最受欢迎的Web框架
文章目录 Django是什么Django的核心特性1. MTV架构2. 自带的Admin后台管理系统3. ORM(对象关系映射)4. 强大的表单处理5. 完善的文档和活跃的社区 快速入门:使用Django创建一个简单的Web应用步骤1:安装Django步骤2:创建…...

【Unity Shader入门精要 第9章】更复杂的光照(四)
1. 透明度测试物体的阴影 对于物体有片元丢弃的情况,比如透明度测试或者后边会讲到的消融效果,使用默认的 ShadowCaster Pass 会产生问题,这是因为该Pass在生成阴影映射纹理时,没有考虑被丢弃的片元,而是使用完整的模…...

【软件工程】【23.10】p2
关键字: 软件复用技术、过程途径、特定需求是文档核心、数据字典条目、高内聚低耦合独立性、数据流图映射模块结构图、UML依赖、用例图关系、RUB迭代、程序规格说明等价类划分、有效性测试的目标、喷泉模型面向对象、软件验证过程、CMMI...
WPF--几种常用定时器Timer汇总
1.WPF中常用4种Timer: System.Windows.Threading.DispatcherTimer(UI操作线程) 这是一个基于WPF Dispatcher的计时器。它可以在指定的时间间隔内触发Tick事件,并在UI线程上执行回调函数,方便进行UI更新操作。 System.Timers.Timer 这是一个基…...

在vue中实现下载文件功能
实际操作为,在表格中 我们可以获取到文件的id,通过插槽就可以实现 <template #default"scope"><el-button type"text" click"handleDown(scope.row)"><span>下载</span></el-button> </…...

文件中海量数据的排序
文件中海量数据的排序 题目: 跟之前堆排序可以解决TopK问题一样,我们来看看归并排序会用来解决什么问题? 思路: 我们说归并排序是外排序。其实就是将数据分成一个个小段,在内存中进行排序,再拿出内存&am…...

java项目之视频网站系统源码(springboot+vue+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的视频网站系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 视频网站系统的主要使用者管…...

262 基于matlab的一级倒立摆仿真
基于matlab的一级倒立摆仿真,在对一级倒立摆进行数学建模的基础上,对模型进行线性化,得到其状态空间模型,利用二次型最优控制方法得出控制率。输出角度和位置优化曲线。程序已调通,可直接运行。 262 一级倒立摆仿真 状…...

智能无网远控再升级 向日葵Q2Pro升级版发布
无网或者内网设备也想要进行远程控制,是不是听上去有些天方夜谭了?其实这类特种设备的远程控制需求是非常强的,比如医疗/工控设备的远程运维、使用指导教学等等。 实际上,只要这类设备有屏幕,支持可视化的桌面操作&am…...

2024电工杯A题详细思路代码分析数学建模:园区微电网风光储协调优化配置
题目分析:园区微电网风光储协调优化配置 我们会先给出三个问题总体的分析,最后会详细分析问题一的建模和详细内容。 背景: 园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的负荷占比,需配置较高比…...

Docker搭建mysql性能测试环境
OpenEuler使用Docker搭建mysql性能测试环境 一、安装Docker二、docker安装mysql三、测试mysql连接 一、安装Docker 建立源文件vim /etc/yum.repos.d/docker-ce.repo增加内容[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://repo.huaweicloud.com/docker…...

关于开启直连v2rayn代理Fiddler Charles bp抓包失败问题
Fiddler 使用插件:proxy switchyomega 配置代理8888端口为fiddler && charles的监听端口 此时fiddler提示代理已更改点击变更捕获,这时不需要进行点击只需要开启上述插件即可抓到包并且国外代理,如果点击的话回自动更新为原来的ip 即…...
Python 爬虫编写入门
一、爬虫概述 网络爬虫(Web Crawler)或称为网络蜘蛛(Web Spider),是一种按照一定规则,自动抓取互联网信息的程序或者脚本。它们可以自动化地浏览网络中的信息,通过解析网页内容,提取…...

Linux网络编程(socket)
1. 概念 局域网和广域网 局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。 IP(Internet Protocol&a…...

以太坊(3)——智能合约
智能合约 首先明确一下几个说法(说法不严谨,为了介绍清晰才说的): 全节点矿工 节点账户 智能合约是基于Solidity语言编写的 学习Solidity语言可以到WFT学院官网(Hello from WTF Academy | WTF Academy)…...
【Python设计模式03】简单工厂模式
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它通过专门定义一个工厂类来负责创建其他类的实例,而不是在客户端代码中直接实例化对象。这样可以将对象创建的过程与使用对象的过程分离,提高代码的可维护…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...