Nginx 的 location 路径匹配语法详解

本文系统梳理 location 的匹配规则、优先级顺序 ,并结合示例说明常见误区,帮助你在实际配置中做到可预测、可控

location 指令的匹配方式与优先级

Nginx 在接收到请求后,会按照固定的规则顺序location 进行匹配。

理解优先级,是正确配置的关键。

写法 示例 匹配方式 优先级
精确匹配 = location = /foo URI 必须完全一致 🥇 最高
前缀匹配 ^~ location ^~ /images/ 前缀匹配,且命中后不再进入正则匹配阶段 🥈 第二
前缀匹配(普通) location /foo 前缀匹配,多个命中时取最长前缀 🥉 第三
正则匹配 ~ location ~ .php$ 区分大小写的正则 🏅 第四(正则中按书写顺序)
正则匹配 ~* location ~* .jpg$ 忽略大小写的正则 同上
通用匹配 / location / 默认兜底 最低

实际匹配流程(简化版)

可以用一句话概括:

先精确 → 再前缀 → 再正则 → 最后兜底

更完整的逻辑是:

  1. 先检查是否存在 精确匹配 (=)
  2. 再检查所有 前缀匹配,记录最长的一个
  3. 如果该前缀是 ^~,直接命中并结束
  4. 否则进入 正则匹配(按配置顺序)
  5. 若正则未命中,则回退到最长的普通前缀匹配

常见配置示例

nginx 复制代码
server {
    # 1. 精确匹配:只匹配 /login
    location = /login {
        ...
    }

    # 2. 静态资源:前缀匹配并阻断正则
    location ^~ /static/ {
        root /web/data;
    }

    # 3. 正则匹配:处理 PHP 请求
    location ~ .php$ {
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # 4. 普通前缀匹配:API 转发
    location /api {
        proxy_pass http://api-backend;
    }

    # 5. 默认兜底
    location / {
        index index.html;
    }
}

📍 实践建议

  • 静态资源路径(如 /static//assets/)优先使用 ^~
  • API、页面路由多使用普通前缀匹配
  • 正则匹配谨慎使用,避免性能和可读性问题

易错点:proxy_pass 的路径拼接规则 ⚠️

proxy_pass 结尾有 /:替换 location 前缀
proxy_pass 结尾无 /:保留原始 URI

裁剪前缀(推荐用于 API 网关)

nginx 复制代码
location /api/ {
    proxy_pass http://backend/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

# /api/user/list  →  http://backend/user/list

不裁剪前缀

ruby 复制代码
location /api/ {
    proxy_pass http://backend;
}

# /api/user/list  →  http://backend/api/user/list

总结

  • location优先级不是配置顺序,而是语法规则
  • =^~ 是控制匹配行为的"利器"
  • 正则匹配应作为补充手段,而非主力方案
  • proxy_pass 是否带 /,直接决定请求路径是否被裁剪

参考

相关推荐
「、皓子~12 小时前
海狸IM 2.1 私有化部署从零到一:中间件、微服务与 Nginx 全流程
nginx·flutter·微服务·中间件·开源软件·im·海狸im
徐小黑ACG1 天前
nginx配置文件
linux·服务器·nginx
考虑考虑1 天前
nginx打印请求日志
运维·后端·nginx
VIP_CQCRE1 天前
用 Ace Data Cloud 接入 Kling Motion:让 AI 视频生成从“好看”走向“可控”
ai·api·视频生成·kling·acedatacloud
三翼鸟数字化技术团队1 天前
神级API,原生外挂,谁用谁好用
api
用户298698530141 天前
Python 实现 Word 文档转 PDF 的自动化方案
后端·python·api
VIP_CQCRE2 天前
一行配置接入 OpenAI 语音转文字:Ace Data Cloud 让音频转写更简单
ai·openai·api·语音识别·acedatacloud
VIP_CQCRE2 天前
用 Ace Data Cloud 快速接入 Google Veo:让 AI 视频生成从 Demo 走向生产
人工智能·api·ai视频·acedatacloud·veo
Rain的Java大神之路2 天前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
Lsetea2 天前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥