当前位置: 首页 > 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;提高代码的可维护…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...