【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 可以高效地处理各种类型的请求,无论是静态资源、动态内容还是代理转发,都能轻松应对。

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

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

相关文章

网站工作原理

web发展史 1.0时代不可修改 2.0可修改&#xff0c;比如发微博 有以下问题&#xff1a; 课程2&#xff1a; 静态页面 html 动态页面 php 经过服务端的语言解释器&#xff0c;解析成html文件&#xff0c;剩下的就和静态流程一样 后面三个是web服务器&#xff0c;语言解释器&…

边缘人工智能中的视频目标检测方法详解

随着边缘计算和人工智能技术的发展&#xff0c;视频目标检测在边缘设备上的应用变得越来越普遍。这些应用包括智能监控、自动驾驶、无人机巡检等。为了在资源受限的边缘设备上实现高效的目标检测&#xff0c;选择合适的算法和工具至关重要。本文将详细介绍几种适用于边缘设备的…

算法刷题day53:树形DP

目录 引言一、没有上司的舞会二、树的重心三、树的最长路径四、树的中心五、数字转换 引言 关于这个树形 D P DP DP 啊&#xff0c;其实感觉就是对树进行 D F S DFS DFS 只不过有一个返回值罢了&#xff0c;这个返回值一般代表的就是以该结点为根的子树的一个属性&#xff0…

[Spring Boot]baomidou 多数据源

文章目录 简述本文涉及代码已开源 项目配置pom引入baomidouyml增加dynamic配置启动类增加注解配置结束 业务调用注解DS()TransactionalDSTransactional自定义数据源注解MySQL2 测试调用查询接口单数据源事务测试多数据源事务如果依然使用Transactional会怎样&#xff1f;测试正…

dubbo复习: (6)和springboot集成时的条件路由

根据指定的条件&#xff0c;对不满足条件的请求进行拦截。 比如拦截ip地址为192.168.31.227的请求。只需要在dubbo admin中的条件路由菜单创建相应的规则 enabled: true force: true runtime: true conditions:- host ! 192.168.31.227

vlan综合实验

一&#xff0c;实验拓扑&#xff1a; 二&#xff0c;实验需求&#xff1a; 1、pc1和pc3所在接口为access;属于vlan 2;P可以骄问pcepces不的一段;其中pc2可以访问pc4/pc5/pc6; 2、pc1/pc3与pc2/pc4/pc5/pc6不在同一网段; 3、所有pc通过DHCP获取Ip地址&#xff0c;且pc1/pc3可以…

Golang框架HTTP客户端框架zdpgo_resty发送表单请求

核心代码 这里通过字典传递了一个简单的表单数据。 发送的是POST请求。 resp, err : client.R().SetFormData(map[string]string{"username": "jeeva","password": "mypass",}).Post("http://127.0.0.1:3333/login")fmt.P…

Java NIO库中三个不同的类Files、Path和Paths

Files.Path.Paths 三个类是 Java NIO&#xff08;New I/O&#xff09;框架的一部分&#xff0c;用于处理 Java 程序中的文件系统操作。让我们详细介绍一下这三个类&#xff1a;1. java.nio.file.Files 类&#xff1a; - Files 类是 Java NIO 框架的核心部分&#xff0c;提供…

轻松搞定LOGO渲染,用ComfyUI快速生成炫酷效果图!

一、准备工作一键搞定 必备资源&#xff1a;垫图和风格参考图 垫图&#xff1a;提供LOGO的基础参考。 风格参考图&#xff1a;确定LOGO的最终效果风格。 节点信息&#xff1a;一键配置 自定义节点&#xff08;9&#xff09;&#xff1a;包括ComfyUI_Comfyroll_CustomNodes, …

【安装笔记-20240524-Windows-安装测试 7-Zip】

安装笔记-系列文章目录 安装笔记-20240524-Windows-安装测试 7-Zip 文章目录 安装笔记-系列文章目录安装笔记-20240524-Windows-安装测试 7-Zip 前言一、软件介绍名称&#xff1a;7-Zip主页官方介绍7-Zip 主要特征 二、安装步骤测试版本&#xff1a;24.05 (2024-05-14) for Wi…

burpsuite抓包响应报文乱码

1、响应报文中的中文信息乱码 2、解决办法 3、设置成功后重新发起请求

数据可视化-汇总

九大数据分析方法-综合型分析方法以及如何使用这九大分析方法 九大数据分析方法-单指标分析方法与多指标分析方法 数据分析方法与模型 电商数据分析&#xff1a;只会环比下降3%的数据分析师还有救吗&#xff1f; 数据可视化第二版-拓展-和鲸网约车分析一等奖作品 Echarts5…

VMware安装Windows11

本文记录了我使用VMware安装Windows11的操作系统的流程&#xff0c;供大家参考。 创建虚拟机 新建虚拟机 直接默认点下一步 稍后安装操作系统 选择操作系统 本来应该选Windows11的但是我这个版本的VMware没有Windows11所以就选Windows10吧 命名虚拟机 固件类型 注意选择UE…

打开深度学习的锁:(3)进阶知识补充

进阶知识补充 零、深度学习的技巧1.偏差和方差解决技巧2.深度网络层数 一、深度学习的核心1. 参数&#xff08;Weights and Biases&#xff09;2. 网络架构&#xff08;Network Architecture&#xff09;2.1. 激活函数和其导数Sigmoid 函数&#xff1a;ReLU 函数&#xff1a;Ta…

Mesh接入简化SUI转账流程

是一家嵌入式金融公司&#xff0c;旨在实现无缝的加密货币转账&#xff0c;现在宣布支持SUI。Mesh的技术已经整合了300多个交易所和钱包&#xff0c;用户现在可以轻松地将SUI转入和转出包括Coinbase和Binance在内的热门钱包和交易所。 Mesh的技术解决了传统Web3用户在转账时遇…

数据库小项目——叮叮移动业务大厅(三层架构+MySQL数据库)

源码已上传至资源 该项目主要使用技术为MySQL数据库&#xff0c;其中也包含了一些对于文件的写入和读取操作。项目结构采用三层架构&#xff0c;后端的业务逻辑清晰明了。 1.项目结构 项目采用控制台版&#xff0c;前端业务在java包下&#xff0c;每个业务单独成块。若想要GUI…

Day05-Grafana的基本应用与配置

Day05-Grafana的基本应用与配置 1. Grafana概述2. Grafana实战2.1 环境准备2.2 使用流程1&#xff09;部署grafana 9.3.62&#xff09;web页面访问3&#xff09;配置zbx插件4&#xff09;配置grafana的数据源5&#xff09;web: Grafana web页面添加与配置图形dashboard,仪表盘6…

每日一练2024.5.24(补2024.5.26)

题目&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#x…

李良济中医馆荣获天猫健康中药行业“2023年度潜力中医馆”!

李良济集团旗下中医电商品牌李良济中医馆&#xff0c;凭借其在行业中持续提升的竞争力&#xff0c;荣获天猫健康中药行业“2023年度潜力中医馆”称号。 百年品牌&#xff0c;品质信得过 李良济成立于1914年&#xff0c;百余年来&#xff0c;恪守“良心良药&#xff0c;济世济人…

14、Go Gin打印日志

1、使用标准库log包 使用Go的标准库log包&#xff0c;可以快速打印日志到控制台或者文件。 package mainimport ("github.com/gin-gonic/gin""log" )func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {log.Println("请…