nginx的location规则与rewrite解析

    nginx的location规则与rewrite解析是很重要的,并助这两个是配置文件中使用正则表达式最多的指令。所以将两个放在一起来说说。

    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解析
    另:此文章内容来源于网络
相关文章
解决NGINX(或后端代码中获取Header)中自定义带下划线的参数无法获取的问题通过rsyslog实现Nginx日志统一收集这么配置Nginx,使其变成高性能服务器服务器硬盘损坏Ubuntu Server服务器中时间不准的解决办法隐藏nginx的版本终于搞定在nginx上支持.htaccess伪静态了WordPress的Nginx伪静态规则基础篇:CentOS常用命令收藏wordpress实现附件分离到另一服务器防止服务器中网卡被禁用解决远程连接服务器的最大连接数忘记Symantec pcAnywhere服务器链接密码的解决办法用php实现远程网络文件下载到服务器用Rewrite实现域名转向
    标签:Rewrite服务器Nginx 发布于:2020-04-16 15:47:47

当前共有0条评论,我也要发表:

    我的名字:

    我的邮箱: