Nginx Location映射规则总结归纳与最佳实践

2025-06-06 15:50

本文主要是介绍Nginx Location映射规则总结归纳与最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则...

Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程。下面基于官方文档和实战经验的总结:

一、Location匹配规则与优先级

1. 匹配模式

Nginx支持5种location修饰符,优先级从高到低为:

修饰符说明示例
=精确匹配(最高优先级)location = /logo.png
^~最长前缀匹配(匹配后停止正则检查)location ^~ /static/
~正则匹配(区分大小写,按配置文件顺序匹配)location ~ \.php$
~*正则UzEmpOdwW匹配(不区分大小写)`location ~* .(jpg
普通前缀匹配(按最长匹配原则,优先级最低)location /blog/

2. 优先级顺序

Nginx按以下顺序匹配location块:

精确匹配(=
仅当请求URI与location后的字符串完全匹配时生效。正则匹配(~/~*
按配置文件中的书写顺序依次匹配,首个匹配的正则生效。最长前缀匹配(^~
选择匹配URI前缀最长location块。普通前缀匹配
按最长匹配原则选择,若多个location匹配,选择最先定义的。默认匹配(location /
兜底处理未匹配其他规则的请求。

3. 匹配示例

假设配置如下:

locphpation = /exact { ... }          # 精确匹配
location ^~ /prefix { ... }        # 最长前缀匹配
location ~ \.png$ { ... }          # 正则匹配(区分大小写)
location /general { ... }          # 普通前缀匹配
location / { ... }                 # 默认匹配
  • 请求/exact → 匹配location = /exact
  • 请求/prefix/long → 匹配location ^~ /prefix^~优先级高于普通前缀)。
  • 请求/image.PNG → 匹配location ~* \.(jpg|png)$(不区分大小写的正则)。
  • 请求/general/path → 匹配location编程 /general

二、Proxy_pass路径处理规则

proxy_pass指令用于将请求转发到后端服务,其路径拼接逻辑与location配置紧密相关

1. 路径拼接规则

场景示例配置请求URI转发目标
proxy_pass/结尾location /api/ { proxy_pass http://backend/; }/api/userhttp://backend/user
proxy_pass不带/location /api { proxy_pass http://backend; }/api/userhttp://backend/api/user
正则locationlocation ~ ^/app/(.*) { proxy_pass http://app/$1; }/app/v1/datahttp://app/v1/data

关键规则

  • /proxy_pass的URL以/结尾时,替换location匹配的部分。
  • 不带/proxy_pass的URL不带/时,追加location匹配后的完整路径。

2. 路径截取与重写

通过rewrite指令可动态修改转发路径:

location ~* ^/api/v1/ {
    rewrite ^/api/v1/(.*) /$1 break;  # 截取/api/v1/后的路径
    proxy_pass http://backend;
}

请求/api/v1/user/123 android→ 转发到http://backend/user/123

3. 特殊场景处理

Unix Socket转发

location /unix/ {
    proxy_pass http://unix:/var/run/backend.sock:/;
}

避免301重定向

location /app {
    proxy_pass http://backend;
}
# 请求/app(无结尾/)时,Nginx可能自动重定向到/app/
# 使用精确匹配避免:
location = /app {
    proxy_pass http://backend;
}

三、配置优化与最佳实践

精确匹配优先
location =块置于配置文件顶部,减少正则匹配开销。

正则匹配顺序
将高频请求的正则规则前置,提升匹配效率。

路径设计一致性
确保locationproxy_pass的URL格式(是否带/)一致,避免路径拼接错误。

监控
使用error_logAccess_log跟踪匹配过程,优化配置。

四、完整配置示例

server {
    listen 80;
    server_name example.com;
    # 精确匹配静态文件
    location = /favicon.ico {
        log_not_found off;
        access_log off;
        root /var/www/icons;
    }
    # 最长前缀匹配API请求
    location ^~ /api/ {
        proxy_pass http://api_server;
        proxyandroid_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    # 正则匹配图片资源(不区分大小写)
    location ~* \.(jpg|png|gif)$ {
        expires 30d;
        root /var/www/images;
    }
    # 默认匹配
    location / {
        root /var/www/html;
        index index.html;
    }
}

配置说明

  • 精确匹配favicon.ico,关闭日志提升性能。
  • ^~ /api/匹配所有以/api/开头的请求,转发到后端服务。
  • 正则匹配图片文件,设置30天缓存。
  • 未匹配的请求由location /处理,返回静态文件。

到此这篇关于Nginx Location映射规则总结归纳的文章就介绍到这了,更多相关Nginx Location映射规则内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Nginx Location映射规则总结归纳与最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154940

相关文章

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户