在使用Nginx 的时候,主要是对Nginx Http Rewrite 模块进行配置,很多文档都没有写具体的语法,使用起来不能达到灵活的目的,所以整理了一下,官方文档的帮助文档:
此模块使得使用正则表达式来改变UR具备使用正则表达式来改变URI的功能,可根据变量来进行转向和选择配置。
如果相关的指令是在server级别中给出,则将在location之前先执行。如果在location模块有更进一步的重写规则,它们依然会被执行。如果URI的重写是由于location里的指令执行造成的,那么重写后的URI将会作为一个新的URI,location模块会再次进行一次匹配。
这种循环匹配的次数不能大于10次,否则nginx返回500错误
常用指令:
break
语法:break
默认值:无
作用域:server, location , if
终止当前的规则匹配,不再执行任何的重写命令。
语法:if ( condition ) { ... }
默认值:无
作用域:server, location
检查condition的真假值。如果condition为真,则大括号里的命令将会被执行,并且请求会依照模块内的配置被处理。在if模块内的配置会继承前面的配置。理解起来就是如果上一作用域有一个root,那么接下来的if模块也会继承root这个配置。
以下可用于condition中:
* 变量名称;若变量值为空"",或字符串值以"0"开始,皆判定为false
* 可使用 = 和 != 操作符比较变量值
* 可使用 ~ 和 ~* 来匹配正则表达式
* ~ 区分大小写
* ~* 不区分大小写
* !~ 和 !~* 与 ~ 和 ~* 是相反的意思,即为若不匹配正则表达式,结果为真
* 检查一个文件是否存在,使用 -f 和 !-f
* 检查一个目录是否存在,使用 -d 和 !-d
* 检查一个文件/目录/链接是否存在,使用 -e 和 !-e
* 检查文件是否可执行文件,使用 -x 和 !-x
正则表达式中的部分可用一对圆括号括起来,依次按照 $1 至 $9 的变量名进行引用。
return
语法:return
默认值:无
作用域:server, location, if
该指令结束命令执行,并向客户端返回一个状态码。状态码可使用以下值:204, 400, 402-406, 408, 410, 411, 413, 416和500-504。另外,也可发送非标准的状态码444,从而在不发送任何头信息的情况下结束连接。
rewrite
语法:rewrite regex replacement flag
默认值:无
作用域:server, location, if
该指令依据正则表达(regex)和替换处的字符串值(replacement)来重写URI。指令的执行次序按照在配置文件中出现的顺序。
请注意,regex只匹配相对路径,而不是整个的URL。如果想要匹配主机名,请参考下面的if表达式:
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
标志位(flag)具有结束命令执行的功能。
标志位(flag)可使用以下值:
* last 结束rewrite指令的执行,之后查找响应的URI和location
* break 结束rewrite指令的执行
* redirect 以状态码302进行临时重定向;可在替换的串值以 http:// 开头时使用它
* permanent 以状态码301进行永久重定向
如果重定向是相对的(即没有host主机名部分),当重定向时,nginx使用匹配的server_name作为主机名,如果未匹配到相应的头部或头部信息丢失则使用第一个 server_name 设置的值。如果没有设置 server_name, 那么就使用本地域名。如果你想要设置nginx成总是使用"Host"头部,那么请使用带有通配符 * 的 server_name 设置。
语法:set variable value
默认值:无
作用域:server, location, if
给变量(variable)赋值(value)。对于value的取值,可以使用文本、变量或它们的组合。
uninitialized_variable_warn
语法:uninitialized_variable_warn on\off
默认值:uninitialized_variable_warn on
作用域:http, server, location, if
打开或关闭对于未初始化变量的警告的日志记录。