• Nginx中的一些匹配顺序


      Nginx中经常需要做各种配置,总结如下:

      1、server_name配置

      nginx中的server_name指令主要用于配置基于名称虚拟主机,同一个Nginx虚拟主机中,可以绑定多个server_name,各个域名用空格隔开即可。如下:  

    server
    {
        listen       80;
        server_name  test.com www.test.com;
        。。。 。。。
    }

      如果server_name有多个,那么通过代码如$_SERVER["SERVER_NAME"]获取的始终将是Nginx server_name配置中的第一个域名,第一个域名就相当于Apache虚拟主机配置中的ServerName,后面的域名就相当于Apache的ServerAlias。

      如果nginx中有多个server块,那么请求匹配server_name的顺序如下:

      首先匹配准确的server_name,如:server_name  test.com www.test.com;

      然后匹配以*通配符开始的server_name,如:server_name  *.test.com;

      然后匹配以*通配符结束的server_name,如:server_name  www.test.*;

      最后匹配正则表达式形式的server_name,如:server_name ~^(?<www>.+).test.com$;

      以上只有有一项匹配到以后就会停止搜索。

      2、Location配置

      location的语法规则如下: location [=|~|~*|^~] /uri/ { … }.

      在nginx中location分为两类:普通location和正则location。普通 location ”是以“ = ”或“ ^~ ”为前缀或者没有任何前缀的 /uri/,包括“/”;“正则 location ”是以“ ~ ”或“ ~* ”为前缀的 /uri/ 。

      那么如果一个 server 块中编写了多个 location 的时候,Nginx对于客户端请求匹配顺序如何呢?

      官网说明如下:先匹配普通location,取的最大前缀匹配,再匹配正则location,如果匹配到则按照正则匹配,如果有多个正则可以匹配到,则按照第一个匹配结果处理,如果正则匹配失败则使用普通location的最大前缀匹配。Nginx也设置了几种机制可以打断这种顺序,分别是“^~ ”、“= ”或者location精确匹配。

      简单的讲顺序如下:

      首先普通location“=”精确匹配;

      然后普通location的URL精确匹配;

      然后普通location”^~"配置;

      然后正则匹配;

      然后其他普通location匹配;

      最后“/”通用匹配

      3、Rewirte配置

      rewrite指令的最后一项参数为flag标记,flag标记有一下四种,说明一下:

      1> last

      标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求。使用last实现URI重写后,浏览器地址栏不变。使用alias指令必须用last标记。

      2> break

      标记在本条规则匹配完成后,终止匹配,不再匹配后面的规则。使用break实现URI重写后,浏览器地址栏不变。使用proxy_pass指令时,需要使用break标记。

      3> redirect

      返回302临时重定向,浏览器地址会显示跳转后的URL地址。

      4> permanent

      返回301永久重定向,浏览器地址会显示跳转后的URL地址。

  • 相关阅读:
    linux kgdb 补丁
    linux kdb 内核调试器
    linux 使用 gdb
    linux 系统挂起
    linux oops 消息
    linux strace 命令
    linux ioctl 方法
    linux seq_file 接口
    [数据结构] 迷宫问题(栈和队列,深搜和广搜)
    简化浏览器地址栏訪问路径
  • 原文地址:https://www.cnblogs.com/silent2012/p/5524656.html
Copyright © 2020-2023  润新知