当前位置: 首页 > news >正文

【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 匹配方式:

  1. 前缀匹配:默认的匹配方式,不带修饰符,匹配 URI 的前缀。

    location /api {# 处理 /api 及其子路径的请求
    }
    
  2. 精确匹配:使用 = 修饰符,仅当请求 URI 与指定字符串完全相等时匹配。

    location = / {# 仅处理根路径 / 的请求
    }
    
  3. 正则表达式匹配:使用 ~ 或 ~* 修饰符,分别表示区分大小写和不区分大小写的正则表达式匹配。

    location ~* \.(jpg|png|gif)$ {# 处理所有以 .jpg、.png 或 .gif 结尾的请求
    }
    
  4. 目录匹配:以斜杠 / 结尾的匹配模式,用于匹配特定的目录。

    location /images/ {# 处理 /images/ 目录下的请求
    }
    

四、location 块的优先级

当有多个 location 块匹配同一个请求时,Nginx 会根据以下规则来确定使用哪个 location 块:

  1. 首先检查是否有精确匹配 (=)。
  2. 如果没有,检查是否有带有正则表达式的匹配 (~ 或 ~*),并使用第一个匹配的规则。
  3. 如果没有正则表达式匹配,则使用最长的前缀匹配。

五、location 块的应用场景

location 块可以用于多种场景,以下是一些例子:

  1. 静态资源服务

    location /static/ {alias /usr/share/nginx/html/static/;
    }
    

    这个 location 块用于服务 /usr/share/nginx/html/static/ 目录下的静态文件。

  2. 代理转发

    location /api/ {proxy_pass http://backend_server;
    }
    

    所有以 /api/ 开头的请求都会被代理到后端服务器。

  3. 错误页面重定向

    error_page 404 /404.html;
    location = /404.html {root /usr/share/nginx/html;internal;
    }
    

    当发生 404 错误时,Nginx 会重定向到 /404.html 页面。

  4. 基于请求方法的处理

    location /api {if ($request_method = POST) {rewrite ^ /api/post last;}
    }
    location /api/post {# 处理 POST 请求
    }
    

    根据请求方法的不同,将请求重写到不同的 location 块进行处理。

  5. 限制访问

    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 服务器和反向代理服务器&#xff0c;它广…...

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十一)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 我们&#xff0c;继续讲一…...

未来机器人的发展方向

未来机器人的发展方向是多元化且充满潜力的。以下是一些主要的发展方向&#xff1a; 人工智能与机器学习的集成&#xff1a;随着人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术的不断进步&#xff0c;机器人将变得更加智能化和自主化。这些技术将…...

美国硅谷高防服务器有哪些优势

美国硅谷高防服务器是位于美国硅谷的&#xff0c;具备高级防护能力的服务器。这种服务器针对网络安全威胁提供了增强的保护措施&#xff0c;以确保数据的安全和业务的连续性。Rak部落小编为您整理发布美国硅谷高防服务器有哪些优势。 具体介绍如下&#xff1a; 1. 安全性&#…...

Django介绍:探索Python最受欢迎的Web框架

文章目录 Django是什么Django的核心特性1. MTV架构2. 自带的Admin后台管理系统3. ORM&#xff08;对象关系映射&#xff09;4. 强大的表单处理5. 完善的文档和活跃的社区 快速入门&#xff1a;使用Django创建一个简单的Web应用步骤1&#xff1a;安装Django步骤2&#xff1a;创建…...

【Unity Shader入门精要 第9章】更复杂的光照(四)

1. 透明度测试物体的阴影 对于物体有片元丢弃的情况&#xff0c;比如透明度测试或者后边会讲到的消融效果&#xff0c;使用默认的 ShadowCaster Pass 会产生问题&#xff0c;这是因为该Pass在生成阴影映射纹理时&#xff0c;没有考虑被丢弃的片元&#xff0c;而是使用完整的模…...

【软件工程】【23.10】p2

关键字&#xff1a; 软件复用技术、过程途径、特定需求是文档核心、数据字典条目、高内聚低耦合独立性、数据流图映射模块结构图、UML依赖、用例图关系、RUB迭代、程序规格说明等价类划分、有效性测试的目标、喷泉模型面向对象、软件验证过程、CMMI...

WPF--几种常用定时器Timer汇总

1.WPF中常用4种Timer&#xff1a; System.Windows.Threading.DispatcherTimer(UI操作线程) 这是一个基于WPF Dispatcher的计时器。它可以在指定的时间间隔内触发Tick事件&#xff0c;并在UI线程上执行回调函数&#xff0c;方便进行UI更新操作。 System.Timers.Timer 这是一个基…...

在vue中实现下载文件功能

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

文件中海量数据的排序

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

java项目之视频网站系统源码(springboot+vue+mysql)

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

262 基于matlab的一级倒立摆仿真

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

智能无网远控再升级 向日葵Q2Pro升级版发布

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

2024电工杯A题详细思路代码分析数学建模:园区微电网风光储协调优化配置

题目分析&#xff1a;园区微电网风光储协调优化配置 我们会先给出三个问题总体的分析&#xff0c;最后会详细分析问题一的建模和详细内容。 背景&#xff1a; 园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提高风光电量的负荷占比&#xff0c;需配置较高比…...

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 使用插件&#xff1a;proxy switchyomega 配置代理8888端口为fiddler && charles的监听端口 此时fiddler提示代理已更改点击变更捕获&#xff0c;这时不需要进行点击只需要开启上述插件即可抓到包并且国外代理&#xff0c;如果点击的话回自动更新为原来的ip 即…...

Python 爬虫编写入门

一、爬虫概述 网络爬虫&#xff08;Web Crawler&#xff09;或称为网络蜘蛛&#xff08;Web Spider&#xff09;&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。它们可以自动化地浏览网络中的信息&#xff0c;通过解析网页内容&#xff0c;提取…...

Linux网络编程(socket)

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

以太坊(3)——智能合约

智能合约 首先明确一下几个说法&#xff08;说法不严谨&#xff0c;为了介绍清晰才说的&#xff09;&#xff1a; 全节点矿工 节点账户 智能合约是基于Solidity语言编写的 学习Solidity语言可以到WFT学院官网&#xff08;Hello from WTF Academy | WTF Academy&#xff09;…...

【Python设计模式03】简单工厂模式

简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过专门定义一个工厂类来负责创建其他类的实例&#xff0c;而不是在客户端代码中直接实例化对象。这样可以将对象创建的过程与使用对象的过程分离&#xff0c;提高代码的可维护…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...