nginx的location规则与rewrite解析

nginx的location规则与rewrite解析主要的格式如下 location pattern 1 直接匹配 这种没有修饰符 直接匹配 URI 直接匹配 2 使用 表示 这种是精确匹配 使用 表示 3 使用 表示 指定后面的正则表达式要区分大小

大家好,欢迎来到IT知识分享网。

为什么要将两个放在一起学习?

因为这两个是配置文件中使用正则表达式最多的指令。

location规则

nginx的http配置主要包括三个区块,如下图所示

nginx的location规则与rewrite解析

http配置

location指令

通过指定的模式与客户端请求的URI进行匹配。主要的格式如下:

location [=|~|~*|^~|@] pattern { ...... }

1、直接匹配。这种没有修饰符,直接匹配URI。

nginx的location规则与rewrite解析

直接匹配

2、使用=表示。这种是精确匹配。(注意等号与后面的URI有空格。)

nginx的location规则与rewrite解析

使用=表示

3、使用~表示。**指定后面的正则表达式(pattern)要区分大小写

nginx的location规则与rewrite解析

使用~表示

4、使用~*表示。指定后面的正则表达式(pattern)不区分大小写

nginx的location规则与rewrite解析

使用~*表示

5、使用^~表示。一旦匹配后就停止搜索其他模式。

nginx的location规则与rewrite解析

使用^~表示。

6、使用@表示。这种可以看做是“普通location”和“正则location”之外的第三种模式,它不是用来处理普通的HTTP 请求的,它是专门用来处理“内部重定向(internally redirected )”请求的。注意:这里说的“内部重定向(internally redirected )”或许说成“forward ”会好点,以为内internally redirected 是不需要跟浏览器交互的,纯粹是服务端的一个转发行为。

location修饰符的优先级

  1. 带有“=“的精确匹配优先
  2. 没有修饰符的精确匹配
  3. 正则表达式按照他们在配置文件中定义的顺序
  4. 带有“^~”修饰符的,开头匹配
  5. 带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
  6. 没有修饰符的,如果指定字符串与URI开头匹配
nginx的location规则与rewrite解析

location修饰符的优先级

rewrite模块

nginx 的重写模块是一个简单的正则表达式匹配与一个虚拟堆叠机结合。依赖于 pcre库,因此需要安装 pcre。根据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样的循环最多可以执行10 次,超过后 nginx 将返回 500 错误。同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他 location、记录做了什么等等。

rewrite模块指令

nginx的location规则与rewrite解析

break:完成当前设置的重写规则,停止执行其他的重写规则。

if:尽量考虑使用 trp_files 代替。它的判断条件有如下值:

  1. 一个变量的名称:空字符串”“或者一些“0”开始的字符串为 false。
  2. 字符串比较:使用=或!=运算符
  3. 正则表达式匹配:使用~(区分大小写)和~(不区分大小写),取反运算!~和!~。
  4. 文件是否存在:使用-f 和!-f 操作符
  5. 目录是否存在:使用-d 和!-d 操作符
  6. 文件、目录、符号链接是否存在:使用-e 和!-e 操作符
  7. 文件是否可执行:使用-x 和!-x 操作符

return:停止处理并为客户端返回状态码。非标准的 444 状态码将关闭连接,不发送任何响应头。可以使用的状态码有:204,400,402-406,408,410, 411, 413, 416 与 500-504。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个 URL,该 URL 将成为 location 头补值。没有状态码的 URL 将被视为一个 302状态码。

rewrite:按照相关的正则表达式与字符串修改 URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。注意:如果替换的字符串以 http://开头,请求将被重定向,并且不再执行多余的 rewrite 指令。

尾部的标记(flag)可以是以下的值:

  • last – 停止处理重写模块指令,之后搜索 location 与更改后的 URI 匹配。
  • break – 完成重写指令。
  • redirect – 返回 302 临时重定向,如果替换字段用 http://开头则被使用。
  • permanent – 返回 301 永久重定向。

rewrite_log:启用时将在 error log 中记录 notice 级别的重写日志。

set:为给定的变量设置一个特定值。

uninitialized_variable_warn:控制是否记录未初始化变量的警告信息。

nginx的location规则与rewrite解析

rewrite示例

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/161922.html

(0)
上一篇 2024-12-12 22:15
下一篇 2024-12-12 22:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信