前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx Location

Nginx Location

作者头像
用户1560186
发布2019-11-19 21:35:08
7610
发布2019-11-19 21:35:08
举报
文章被收录于专栏:运维录运维录


不知不觉 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 示例。


代码语言:javascript
复制
本期搬砖就到这里下期再搬
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档