Nginx——Location用法详解

2023-11-09

目录

一、Nginx的Httpp配置简介

 二、Location匹配规则

1、=:精确匹配

2、^~:最佳匹配

 3、~ :正则表达式要区分大小写

 4、~* :正则表达式不区分大小写

 5、/ 开头:通用匹配

6、综合示例

7、root 、alias指令区别


一、Nginx的Httpp配置简介

Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server { //这个是服务器级别
      listen 80;
      server_name localhost;
        location / { //这个是请求级别
          root html;
          index index.html index.htm;
        }
      }
}

 二、Location匹配规则

优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
以^~ 开头,表示如果该符号后面的字符是最佳匹配,采用该规则,当匹配成功后,不再进行后续的查找。
以~ 开头,表示区分大小写的正则匹配;
以~* 开头,表示不区分大小写的正则匹配
以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到

1、=:精确匹配

server {
server_name sish
  location = /abc {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1

如下是错的:
http://baidu.com/abc/
http://baidu.com/abcde

2、^~:最佳匹配

server {
  server_name baidu.com;
  location ^~/abc {
    ……(不再进行后续的查找)
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde

 3、~ :正则表达式要区分大小写

server {
server_name baidu.com;
  location ~ ^/abc$ {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1=11&p2=22

如下是错的:
http://baidu.com/ABC
http://baidu.com/abc/
http://baidu.com/abcde

 4、~* :正则表达式不区分大小写

server {
server_name baidu.com;
location ~* ^/abc$ {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu..com/ABC
http://baidu..com/abc?p1=11&p2=22

如下是错的:
http://baidu..com/abc/
http://baidu..com/abcde

 5、/ 开头:通用匹配

server {
  server_name baidu.com;
  location ^~/abc {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde

6、综合示例

location = / {
    # 精确匹配 / ,主机名后面不能带任何字符串
    [ configuration A ]
}

location / {
    #通用匹配, 如果没有其它匹配,任何请求都会匹配到
    [ configuration B ]
}

location /documents/ {
    # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
    [ configuration C ]
}

location ~ /documents/Abc {
    # 匹配任何以 /documents/ Abc开头的地址,匹配符合以后,还要继续往下搜索
    [ configuration CC ]
}

location ^~ /images/ {
    # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
    [ configuration D ]
}

location ~* \.(gif | jpg | jpeg)$ { 
    # 匹配所有以 gif,jpg或jpeg 结尾的请求
    [ configuration E ]
}

location /images/ {
    # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
    [ configuration F ]
}

location /images/abc {
    # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
      # F与G的放置顺序是没有关系的
    [ configuration G ]
}

location ~ /images/abc/ {    
    # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用    
    [ configuration H ]
}

按照上面的location写法,以下的匹配示例成立:
/ -> config A
精确完全匹配,即使/index.html也匹配不了
/downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B
/images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下
/images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序
/documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C
/documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E
/documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E

7、root 、alias指令区别

alias是一个目录别名的定义,root则是最上层目录的定义。还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的,而root则可有可无!

location /img/ {
    alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去 /var/www/image/ 目录找文件

location /img/ {
    root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去 /var/www/image/img/ 目录下找文件。 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx——Location用法详解 的相关文章

  • Nginx 对 cms 后端的重写规则

    我需要在 nginx 服务器中制定 url 重写规则 服务器块 就像我之前的 apache 服务器一样 这是 htaccess 中的代码 我需要将其实现 转换 到我现有的代码中 RewriteRule A Za z0 9 A Za z0 9
  • 为什么要使用 Node.js 安装服务器(Nginx、Apache...)? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 Node js Express Web 框架下需要 apache https stackoverflow com questions 9287747 why do we need apache
  • 从 Nginx 到 Express.js 上的 socket.io 的反向代理上“无法获取”

    我已经关注了通过私有网络让 Node js 在两台 Ubuntu 14 04 服务器上通过 Nginx 工作 Node js 位于 myappserver 上 通过私有 IP myprivatewebserver 访问 并通过 mypubl
  • Kong - 验证上游 ssl(ssl_proxy 打开)

    我已经成功为 API 安装了 kong 网关 该 API 通过上游负载平衡到多个目标 应用程序服务器 现在 我有一个我的应用程序服务器的自签名证书 kong 和目标之间的 ssl 握手应该失败 我推断 kong 不验证上游证书 经过一些研究
  • 如何将亚马逊颁发的免费证书配置到nginx.config

    我已经安装了nginx服务器在Amazon Linux 2环境 在创建弹性负载均衡器期间 我创建了 Amazon 的免费证书 现在 我想通过以下方式访问我的服务器https port 443 我该如何配置这个SSL证书在nginx conf
  • nginx 将虚拟目录重写为文件

    这应该很容易做到 但我的头撞在墙上了 如果我收到对 www mysite com mypath 的请求 我想提供 www mysite com myotherpath thisfile html 的内容 我如何使用 nginx 配置来做到这
  • Node + Express + Nginx 未设置 Cookie

    我有一个使用 Express 的 Node 应用程序 我尝试为我的客户端设置 cookie 它在本地环境 http 上运行良好 但是一旦我投入生产 https 我就很好地收到了cookie 我可以在响应中看到它 但它没有设置 任何想法 Ng
  • 如何将多个域路由到多个节点应用程序?

    我习惯了典型的 Lamp Web 托管环境 您只需单击 cpanel 中的几个按钮 您的域就会被分区并映射到 htdocs 中的文件夹 我经常使用 Node js 但做同样的事情似乎并不那么简单 如果我有多个节点应用程序 并且我想将doma
  • 如果我在不打算升级到 websocket 连接的 HTTP 请求中包含“Upgrade”和“Connection”标头,会发生什么情况?

    我有一个 Nginx 服务器块 用于代理对 node js 服务器的请求 该服务器同时提供 HTTP 内容和 WS websocket 内容 是否可以在不应升级到 Websocket 连接的请求上添加升级标头 即使用 Nginx 代理到服务
  • Nginx反向代理返回404

    我的 Nginx 安装并运行 下面是配置 etc nginx nginx conf 我要全部转发 api 到我的 tomcat 服务器 该服务器在同一服务器上的端口 9100 上运行 类型http myhost 9100 api apps有
  • 如何在位置中使用 Nginx Regexp

    Web 项目将静态内容放入 some content img 文件夹中 url规则为 img some md5 但文件夹中的位置 content img 前两位数字 Example url example com img fe5afe048
  • 使用 Nginx 或 Apache 来提供动态内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 错误:从上游读取响应标头时上游过早关闭连接 [uWSGI/Django/NGINX]

    我目前在用户正在进行的查询中总是得到 502 它通常返回 872 行 在 MySQL 中运行需要 2 07 然而 它返回了大量信息 每一行包含很多东西 有任何想法吗 运行 Django tastypie Rest API Nginx 和 u
  • 如何在运行 NGINX Docker 容器的 AWS EC2 上启用 HTTPS?

    我在 AWS 上有一个运行 Amazon Linux 2 的 EC2 实例 在上面 我安装了 Git docker 和 docker compose 完成后 我克隆了我的存储库并运行docker compose up让我的生产环境启动 我访
  • 我可以在 Nginx Conf 中添加多少个服务器块

    知道我可以在 Nginx 配置中添加多少个服务器块吗 我需要将它用于具有多个子域的反向代理 每个客户端一个子域 它能成功支持 10 000 个服务器块吗 有没有相关的基准研究 这实际上并不是一个你有多少人的问题can但你有多少 能够妥善处理
  • NGINX hashbang 重写

    我想知道 hashbang url 的位置或重写 nginx 指令会是什么样子 基本上像前端控制器一样通过 hashbang 路由所有非 hashbanged url 所以 http example com about staff 将路由至
  • 将应用程序级别用户名/用户 ID 注入 nginx/Apache 日志

    有没有办法将应用程序级别的用户名或 id 在本例中为 django 用户名或 id 注入 Apache 或 ngnix 日志中 请注意 我不是询问 HTTP 身份验证用户名 我目前正在使用一个简短的自定义中间件将此数据添加到响应标头 如下所
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 连接被拒绝:当uwsgi和nginx在不同容器中时

    我正在尝试设置两个 docker 容器 是的 无需 docker compose 分开 一个带有 nginx 另一个带有带有基本 Flask 应用程序的 uwsgi 我在 docker 内的同一网络中运行容器我的 nginx 配置已添加 链

随机推荐

  • TaiShan 200服务器安装Ubuntu 18.04

    TaiShan 200服务器安装Ubuntu 18 04 0 镜像下载 1 准备工作 1 1 软件硬件环境准备 1 2 组网规划 1 3 磁盘分区规划 1 4 可选 RAID配置 2 通过光驱安装Ubuntu 18 04 0 镜像下载 ub
  • 峰值电流模式Buck控制器

    图1 7 1峰值电流模式Buck Converter方块图 图1 7 1包含两个回路 分别是外回路 电压控制回路 和内回路 电感电流控制回路 外回路 电压控制回路 此回路类似与输出电压控制模式类似 Vcomp为输出电压与基准电压通过比较器而
  • Android Studio 中使用uiautomatorviewer插件

    1 综述 Android Studio是Google官方提供的一款用于开发Android应用程序的集成开发环境 IDE 它基于IntelliJ IDEA开发而来 为开发者提供了完整的工具链 包括代码编写 调试 测试 性能优化等 Androi
  • C++实现MySQL数据库连接池

    C 实现MySQL数据库连接池 涉及技术 MySQL数据库编程 单例模式 STL容器 C 11多线程 线程互斥 线程互斥 线程同步通信和unique lock 智能指针shared ptr lambda表达式 生产者 消费者线程模型 项目背
  • 职场日常:测试常用测试工具盘点,你用过几个?

    测试工具永远是软件测试人员的得力助手 不能完全依赖工具 但也不能没有工具 在学习软件过程中 要著中软件测试工具的使用 1 测试管理工具 禅道 简单好用 市场主流 互联网行业居多 Jira 简单好用 bugzilla 功能简单 svn 代码和
  • StringBuffer简单使用

    StringBuffer简单使用 一 简介 StringBuffer 是可以存储和操作字符串 即包含多个字符的字符串数据 String类是字符串常量 是不可更改的常量 而StringBuffer是字符串变量 它的对象是可以扩充和修改的 St
  • 【Linux】如何在Linux下提交代码到gittee

    文章目录 使用 git 命令行 创建项目 三板斧第一招 git add 三板斧第二招 git commit 三板斧第三招 git push 其他几个重要的命令 git pull 将远端同步到本地 git rm 删除 git log 查看提交
  • 如何让 useEffect 支持 async/await?

    大家在使用 useEffect 的时候 假如回调函数中使用 async await 的时候 会报错如下 看报错 我们知道 effect function 应该返回一个销毁函数 return返回的 cleanup 函数 如果 useEffec
  • linux 查看运行进程的可执行文件所在目录

    1 获取PID 方法1 执行top命令 然后找到对应的进程 方法2 执行ps ef grep 程序名 2 进入proc目录下对应的进程路径 cd proc 3 sudo ls l user为root的进程需要sudo权限 exe连接的即可执
  • go语言基础-----11-----正则表达式

    1 正则表达式介绍 正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具 虽然正则表达式比纯粹的文本匹配效率低 但是它却更灵活 按照它的语法规则 随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合 Go语言通过r
  • Java-API简析_java.lang.RuntimePermission类(基于 Latest JDK)(浅析源码)

    版权声明 未经博主同意 谢绝转载 请尊重原创 博主保留追究权 https blog csdn net m0 69908381 article details 132571263 出自 进步 于辰的博客 因为我发现目前 我对Java API的
  • 【MySQL安装问题】找不到MSVCR120.dll,无法继续执行代码。

    Q 由于找不到MSVCP120 dll 无法继续执行代码 重新安装程序可能会解决此问题 A 参考解决方法链接由于找不到MSVCP120 dll 无法继续执行代码 重新安装程序可能会解决此问题 琴时 博客园 解决方式 点击进入微软官网下载地址
  • MATLAB 数学应用 初等数学 绘制虚数和复数数据图

    文章最后留了个超实用的matlab在线测试工具 绘制一个复数输入 本文演示如何绘制复数向量 z 的虚部与实部 在此复数输入中 plot z 等同于 plot real z imag z 其中 real z 是 z 的实部 imag z 是
  • docker容器部署pytorch模型,gpu加速部署运行

    参考文章 https www zhihu com search type content q Docker EF BC 8C E6 95 91 E4 BD A0 E4 BA 8E E3 80 8C E6 B7 B1 E5 BA A6 E5
  • thinkphp6 入门教程合集(更新中)

    thinkphp6 入门 1 安装 路由规则 多应用模式 thinkphp6 入门 1 安装 路由规则 多应用模式 软件工程小施同学的博客 CSDN博客 thinkphp6 入门 2 视图 渲染html页面 赋值 thinkphp6 入门
  • 组件是如何通信的?技术水平真的很重要!学习路线+知识点梳理

    开头 此文希望能给想跳槽和面试朋友一些参考 金九银十已过 面试的狂热季也已结束 小编也正是选择了在金九十银跳槽 之前在腾讯做了五年Android开发工作 之后感觉公司不一定能继续提供给我想要的发展空间与前景 说白了 有家室 我需要更高的薪酬
  • pandas提取时间里面的年月日_python入门

    时间模块 datetime 1 datetime date date对象 年月日 datetime date today 该对象类型为datetime date 可以通过str函数转化为str In 1 import datetime In
  • 砝码称重问题【dp】

    设有 1g 2g 3g 5g 10g 20g 的砝码各若干枚 其 总重 1000g 要 求 输入 a1 a2 a3 a4 a5 a6 表示 1g 砝码有 a1 个 2g 砝码有 a2 个 20g 砝码有 a6 个 输出 Total N N
  • 【MySQ必知必会】MySQL 是怎么存储数据的?

    文章目录 总结 前言 一 创建数据库 二 确认字段 三 创建数据表 四 插入数据 总结 CREATE DATABASE demo DROP DATABASE demo 删除数据库 SHOW DATABASES 查看数据库 创建数据表 CRE
  • Nginx——Location用法详解

    目录 一 Nginx的Httpp配置简介 二 Location匹配规则 1 精确匹配 2 最佳匹配 3 正则表达式要区分大小写 4 正则表达式不区分大小写 5 开头 通用匹配 6 综合示例 7 root alias指令区别 一 Nginx的