为什么要将两个放在一起学习?
因为这两个是配置文件中使用正则表达式最多的指令。
location规则
nginx的http配置主要包括三个区块,如下图所示
http配置
location指令
通过指定的模式与客户端请求的URI进行匹配。主要的格式如下:
location [=|~|~*|^~|@] pattern {
......
}
1、直接匹配。这种没有修饰符,直接匹配URI。
直接匹配
为什么要将两个放在一起学习?
因为这两个是配置文件中使用正则表达式最多的指令。
nginx的http配置主要包括三个区块,如下图所示
http配置
通过指定的模式与客户端请求的URI进行匹配。主要的格式如下:
location [=|~|~*|^~|@] pattern {
......
}
1、直接匹配。这种没有修饰符,直接匹配URI。
直接匹配
2、使用=表示。这种是精确匹配。(注意等号与后面的URI有空格。)
使用=表示
3、使用~表示。**指定后面的正则表达式(pattern)要区分大小写
使用~表示
4、使用~*表示。指定后面的正则表达式(pattern)不区分大小写
使用~*表示
5、使用^~表示。一旦匹配后就停止搜索其他模式。
使用^~表示。
6、使用@表示。这种可以看做是“普通location”和“正则location”之外的第三种模式,它不是用来处理普通的HTTP 请求的,它是专门用来处理“内部重定向(internally redirected )”请求的。注意:这里说的“内部重定向(internally redirected )”或许说成“forward ”会好点,以为内internally redirected 是不需要跟浏览器交互的,纯粹是服务端的一个转发行为。
location修饰符的优先级
nginx 的重写模块是一个简单的正则表达式匹配与一个虚拟堆叠机结合。依赖于 pcre库,因此需要安装 pcre。根据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样的循环最多可以执行10 次,超过后 nginx 将返回 500 错误。同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他 location、记录做了什么等等。
break:完成当前设置的重写规则,停止执行其他的重写规则。
if:尽量考虑使用 trp_files 代替。它的判断条件有如下值:
return:停止处理并为客户端返回状态码。非标准的 444 状态码将关闭连接,不发送任何响应头。可以使用的状态码有:204,400,402-406,408,410, 411, 413, 416 与 500-504。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个 URL,该 URL 将成为 location 头补值。没有状态码的 URL 将被视为一个 302状态码。
rewrite:按照相关的正则表达式与字符串修改 URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。注意:如果替换的字符串以 http://开头,请求将被重定向,并且不再执行多余的 rewrite 指令。
尾部的标记(flag)可以是以下的值:
rewrite_log:启用时将在 error log 中记录 notice 级别的重写日志。
set:为给定的变量设置一个特定值。
uninitialized_variable_warn:控制是否记录未初始化变量的警告信息。
rewrite示例