热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Nginx配置字段:location详解

nginxlocation可以根据字符串或者正则表达式来进行匹配如果要使用正则表达式,则必须以“~”或者~*开头~表示区分大小写~*表示不区分大小写匹配过程如下:第一步:进行字符串匹配,找到最合适的那一个第二步:进行正则表达式匹配,找到匹配上的第
nginx location可以根据字符串或者正则表达式来进行匹配
如果要使用正则表达式,则必须以“~”或者"~*"开头
"~"表示区分大小写
"~*"表示不区分大小写
匹配过程如下:
第一步:进行字符串匹配,找到最合适的那一个
第二步:进行正则表达式匹配,找到匹配上的第一个
第三步:如果第二步匹配上了,则用第二步匹配的结果,否则用第一步匹配的结果
从上面可以看出来,正则表达式的优先级要高一些
上面的匹配过程的例外:
    1.可以用"="加在字符串前面,表示完全匹配,如果过来的url与某个字符串完全匹配(前面有"="),则搜索停止。因此经常访问"/",则用"=/"可以加快一点点处理速度(因为它停止了nginx配置中的其他搜索)
    2.如果只想用字符串匹配,则在字符串前加“^~”,则一旦字符串匹配上了,就不会再进行正则表达式匹配
综上,location的匹配规则如下:
      1.先进行"="的完全匹配,如果匹配上,则搜索停止
      2.进行字符串匹配,如果匹配上了,但是没有"^~",则进行第3步;如果匹配上了,而且有"^~",则搜索停止;
      3.正则表达式匹配,如果匹配上了,则搜索停止;如果没有匹配上,则进行第4步;
      4.此时第3步没有匹配上,则拿第2步匹配的结果来进行,如果第2步也没有匹配上,则跳到错误页面(404)
location  = / {
  # 只匹配"/"
  [ configuration A ] 
}
location  / {
  # 匹配一切以"/"为开头的查询,但是正则表达式(优先级更高),和
  # 更长的字符串匹配(更切合查询)将优先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配以"/images/"开头的查询,因为有"^~",将不会搜索正则表达式
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配一切以".gif  .jpg .jpeg"为结尾的查询,然后如果查询以"/images/"开头,
  # 以“.gif   .jpg   .jpeg”结尾,还是会匹配 configuration C
  [ configuration D ] 
举例查询
/ -> configuration A
/documents/document.html -> configuration B
/images/1.gif -> configuration C
/documents/1.jpg -> configuration D
--------------------------------------------------------------------------------------------------------------------------------
实际测试,下面为一个完整的nginx域名配置,使用return来进行区分匹配上哪个location
server{
     listen       80;
     server_name  want.abc.com;
     charset gbk;
     access_log  logs/want_access.log  main;
     error_log  logs/want_error.log;
    location  = / { return 100;}
    location  / { return 101;}
    location ~ /images/ { return 102;}
    location ^~ /images/ { return 103;}
    location ~* \.(gif|jpg|jpeg)$ {return 105;   }
    location /a {return 106;}
    location ~ /a { return 107; }
}
解释:先进行"="的完全匹配,如果匹配上,则搜索停止
~# wget want.abc.com/            
--2012-01-05 16:09:23--  http://want.abc.com/
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 100 
2012-01-05 16:09:23 错误 100:(没有描述)。
解释:正则表达式没有匹配上,就是用字符串匹配
# wget want.abc.com/document/document.html
--2012-01-05 16:12:03--  http://want.abc.com/document/document.html
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 101 
2012-01-05 16:12:03 错误 101:(没有描述)。
解释:进行字符串匹配,匹配上了,同时有"^~",则停止搜索
#wget want.abc.com/images/a
--2012-01-05 16:12:25--  http://want.abc.com/images/a
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 103 
2012-01-05 16:12:25 错误 103:(没有描述)。
解释:正则表达式匹配上了,停止搜索
# wget want.abc.com/abc/1.gif
--2012-01-05 16:14:23--  http://want.abc.com/abc/1.gif
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 105 
2012-01-05 16:14:23 错误 105:(没有描述)。
解释:字符串匹配上了,正则表达式匹配上了,但是优先使用正则表达式匹配
# wget want.abc.com/a
--2012-01-05 16:18:15--  http://want.abc.com/a
正在解析主机 want.abc.com... 127.0.0.1
正在连接 want.abc.com|127.0.0.1|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 107 
2012-01-05 16:18:15 错误 107:(没有描述)。

推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
author-avatar
mobiledu2502879827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有