【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)是一种创建型设计模式,它通过专门定义一个工厂类来负责创建其他类的实例,而不是在客户端代码中直接实例化对象。这样可以将对象创建的过程与使用对象的过程分离,提高代码的可维护…...
对接亚马逊 SP-API(Amazon Selling Partner API) 第一章:AWS IAM 配置详解
1. AWS IAM 基础概念扫盲 第一次接触亚马逊SP-API的开发者,往往会在IAM配置环节卡壳。我见过不少团队在这个阶段浪费两三周时间反复调试,其实只要理解几个核心概念就能事半功倍。IAM(Identity and Access Management)就像亚马逊AW…...
失业期PHP程序员玻璃心,伪勤奋,固守旧认知的庖丁解牛
“失业期 PHP 程序员的玻璃心、伪勤奋、固守旧认知”,这三者并非独立的性格缺陷,而是一套互为因果的“心理防御闭环”。 它们共同构成了一个**“认知牢笼”**:因为害怕面对真实的残酷(玻璃心),所以用低价值…...
游戏开发中的乒乓缓存实战:Unity双缓冲技术如何提升渲染性能
游戏开发中的乒乓缓存实战:Unity双缓冲技术如何提升渲染性能 在Unity游戏开发中,渲染性能优化一直是开发者关注的焦点。当画面复杂度和特效层级不断提升时,传统的单缓冲机制往往难以满足流畅渲染的需求,这时乒乓缓存(P…...
抖音无水印视频批量下载全攻略:从痛点解决到高效管理
抖音无水印视频批量下载全攻略:从痛点解决到高效管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...
基于碳排放交易与需求响应的综合优化调度策略:微网虚拟电厂日前调度模型研究
MATLAB代码:计及碳排放交易及多种需求响应的微网/虚拟电厂日前优化调度 关键词:碳排放交易 需求响应 空调负荷 电动汽车 微网/虚拟电厂优化调度 参考文档:《计及电动汽车和需求响应的多类电力市场下虚拟电厂竞标模型》参考其电动汽车模型以及…...
手把手教你用王思鱼指纹浏览器(Windows版)绕过主流检测站点
实战指南:Windows指纹浏览器配置与主流检测站点绕过验证 指纹浏览器正逐渐成为数字身份管理领域的重要工具,它能有效解决多账号运营、隐私保护等场景下的浏览器指纹追踪问题。不同于传统虚拟机的笨重方案,这类工具通过精准修改浏览器底层参数…...
OpCore-Simplify:颠覆性重构开源系统硬件适配流程,从8小时到30分钟的效率革命
OpCore-Simplify:颠覆性重构开源系统硬件适配流程,从8小时到30分钟的效率革命 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify …...
OpenFBX:轻量级FBX文件解析的终极解决方案
OpenFBX:轻量级FBX文件解析的终极解决方案 【免费下载链接】OpenFBX Lightweight open source FBX importer 项目地址: https://gitcode.com/gh_mirrors/op/OpenFBX OpenFBX是一款轻量级开源FBX导入工具,专为解决3D开发中FBX文件解析难题而设计。…...
车规 vs 工规:智能座舱到底有没有“必要上车规”?一篇讲透成本、风险与真实行业做法
🚗 车规 vs 工规:智能座舱到底有没有“必要上车规”?一篇讲透成本、风险与真实行业做法 在汽车电子领域,“车规器件”几乎成了默认选项。但随着智能座舱算力暴涨、成本压力加剧,一个现实问题正在被越来越多团队重新审视: 中控、TBOX、娱乐系统,是否必须全面车规? 这不…...
养护之心:超越“出世/入世”二分,重思中国思想传统的精神功能
养护之心:超越“出世/入世”二分,重思中国思想传统的精神功能---过程稿声明本文系岐金兰与AI协作完成的元人文研究过程稿,基于“大儒家观”立场展开。全文共约22,000字。本稿为阶段性研究成果,后续可能继续修订完善。文中观点仅代…...
