壹
不知不觉 nginx主题的文章写了60+篇,有最早的也有最近的,有些是记录安装配置,有些是记录问题解决方法,内容质量有深也有浅参差不齐,随着技术迭代有些文章已经过时了(例如Docker时代)不再符合当前的技术需求,而有些文章虽然久远但是仍有有意义(例如Nginx HA),所以有了梳理这些文章的想法,目标有两个吧,一是回顾下过去的文章巩固下知识点,二是去其糟粕留下精华将有价值的文章搬迁(搬砖)的微信公众号。
今天的这篇文章发布于2013年05月,是介绍如何使用nginx location指令根据不同的URI进行独立配置,例如匹配PHP文件转发给后端FastCGI进程处理,或者匹配图片类文件为其设置一个HTTP Expires头部信息,再如公用的CDN源站服务器根据URI代理到不同的upstream服务器等工作中常用的场景。这篇文章除location指令外还涉及if指令与rewrite指令配合使用。
贰
先来看下nginx location 示例配置文件。
server { #... 其它配置项省略 # 匹配正则 location ~* /(fashion|life|men)/pic/ { rewrite ^/ http://blog.test.com/ permanent; } # 匹配字符串 location ^~ /fashion/pic/ { proxy_pass http://blog.test.com/; } }
测试结果
curl -IL http://192.168.57.75/fashion/pic/ HTTP/1.1 200 OK Server: nginx Date: Tue, 14 Aug 2012 07:56:10 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding X-Powered-By: PHP/5.3.6 X-Pingback: http://blog.test.com/xmlrpc.php
从配置文件看这两个location 都能匹配URI /fashion/pic/,不同的是前者使用的是正则匹配,而后者是字符串匹配。
这里涉及到匹配顺序问题,从服务器返回的结果可以知道 nginx选择了匹配字符串,这是因为使用了^~标识符字符串匹配后不再检查正则,也就是只使用字符串匹配结果。
叁
语法:location [=|^~|~|~*|@] /uri/ { … } 默认值:no 使用字段:server 功能: 根据URI的不同需求进行配置,可以使用字符串与正则表达式匹配。 如果要使用正则表达式,你必须指定下列前缀: ~* 不区分大小写。 ~ 区分大小写。
1. 匹配规则 要确定该指令匹配特定的查询,程序将首先对字符串进行匹配,字符串匹配将作为查询的开始,最确切的匹配将被使用。然后正则表达式的匹配查询开始,匹配查询的第一个正则表达式找到后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果。
可以使用“^~”标记禁止在字符串匹配后检查正则表达式,如果最确切的匹配location有这个标记,那么正则表达式不会被检查。
使用“=”标记可以在URI和location之间定义精确的匹配,在精确匹配完成后并不进行额外的搜索,例如有请求“/”发生,则可以使用“location = /”来加速这个处理。
即使没有“=”和“^~”标记,精确的匹配location在找到后同样会停止查询。 2. 匹配顺序 前缀“=”表示精确匹配查询,如果找到立即停止查询。 使用标准字符串,如果匹配到使用“^~”前缀则停止查询。 正则表达式按照他们在配置文件中定义的顺序。 如果第三条产生一个匹配,这个匹配将被使用,否则将使用第二条的匹配。 3. 匹配示例
location = / { # 只匹配 / 查询. [ configuration A ] } location / { # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。 [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。 [ configuration D ] } 各请求的处理如下例: / → configuration A /documents/document.html → configuration B /images/1.gif → configuration C /documents/1.jpg → configuration D
注意,你可以以任何顺序定义这4个配置并且匹配结果是相同的,但当使用嵌套的location结构时可能会将配置文件变的复杂并且产生一些比较意外的结果。
肆
常用的location 示例。
本期搬砖就到这里下期再搬
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有