热门标签 | 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:(没有描述)。

推荐阅读
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文提供了 Oracle 12c 数据库的官方下载链接,并附带了安装前的一些准备工作和注意事项。 ... [详细]
  • 使用Root权限执行命令时遇到的问题及解决方案
    本文讨论了在Linux系统中使用特定插件(如fastestmirror和langpacks)时,若非root用户尝试执行某些命令可能遇到的权限问题,并提供了相应的解决方法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
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社区 版权所有