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匹配;

  最后“/”通用匹配

时间: 2024-10-27 08:30:34

Nginx中的一些匹配顺序总结的相关文章

nginx中的location匹配规则介绍

简要概述 location匹配的几个命令的说明,如下 符号 说明 ~ 波浪线表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 = 进行普通字符精确匹配 @ "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files 具体详情,请参加官方文档 官方文档理解 前缀匹配 前面带有/或者/documents/的为前缀匹配.前缀匹

Nginx中虚拟主机配置

一.Nginx中虚拟主机配置 1.基于域名的虚拟主机配置 1.修改宿主机的hosts文件(系统盘/windows/system32/driver/etc/HOSTS) linux : vim /etc/hosts 格式: ip地址 域名 eg: 192.168.3.172 www.gerry.com 2.在nginx.conf文件中配置server段 server {   listen 80;   server_name www.gerry.com; # 域名区分       location

nginx中server块的匹配顺序

客户端发出一个http请求时,nginx收到后会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求. server_name与host匹配优先级顺序如下: 能匹配上的情况优先级顺序: 1.完全匹配 2.通配符在前的,如*.xxxx.com 3.在后的,如aaa.bbb.* 4.正则匹配,如~^\.aaaa\.bbb\.com$ 如果都不匹配的情况下,按下面两种方式处理,优先级如下: 1.优先选

nginx 匹配顺序

Nginx的Location匹配 Location根据类型分为两种:普通配置和正则匹配 一. 普通配置   普通location根据使用方法又分为两种,格式如下: 1.  location  / { 命令序列 } 解释:括号中定义的表示对当前路径及子路径下的所有对象有效."优先级最低" 用户所有的请求都能被它匹配到.         例子: location / { root /web; 相应策略 } 这说明网页根目录在/web         访问的时候直接http://127.0.

Nginx location指令匹配顺序规则

location匹配命令 1. "= ",字面精确匹配, 如果匹配,则跳出匹配过程.(不再进行正则匹配) 2. "^~ ",最大前缀匹配,如果匹配,则跳出匹配过程.(不再进行正则匹配) 3. 不带任何前缀:最大前缀匹配,举例如下: location /  代表以"/"开头的搜索匹配, 再没有正则表达式匹配的情况下才进行这个匹配(优先级最低) 4. "~ ",大小写相关的正则匹配 5. "~* " , 大小写

VS2013和VS2015中MVC 区域路由匹配顺序相反

创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创建一个HomeController和Index视图.修改RouteConfig.cs中的路由注册方法,添加命名空间 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.M

Nginx配置中Location的匹配规则

Location匹配的url的语法规则: location [=|~|~*|^~] /uri/ { … } = 表示精确匹配 ~ 表示区分大小写的正则匹配 ^~ 表示以某个常规字符串开头的url即可: ~* 表示不区分大消息的正则匹配 !~(*!~)表示不区分大小写不匹配的正则 / 通配符,任何请求都能匹配到这个location,如果有任何其他location可以匹配,则会覆盖该location 匹配顺序: 1)先匹配普通url,在匹配正则 2)“普通 location ”的匹配规则是“最大前缀

Nginx中 Rewrite学习笔记

路由重写是Web服务器中的一个很重要的基本功能.通过路由重写,可以结构化URL,更具语义化(对SEO有益).另外,分享出去的URL可能会因程序路由变动而导致URL失效,而路由的重写可以很好的解决这类问题. 适当的使用Rewrite功能,可以更我们带来很多的好处.Nginx中Rewrite的功能是基于perl语言兼容的正则表达式,所以在编译安装nginx之前,需要安装PREC库.Nginx中Rewrite功能实现是基于ngx_http_rewrite_module,所以确保安装了此模块. Rewr

Nginx 配置指令location 匹配符优先级和安全问题【转】

Nginx配置指令location匹配符优先级和安全问题 使用nginx 很久了,它的性能高,稳定性表现也很好,得到了很多人的认可.特别是它的配置,有点像写程序一样,每行命令结尾一个";"号,语句块用"{}"括起来.配制好,直接nginx -t 检查配制情况,配制成功,直接运行:service nginx reload.服务器没有任何宕机情况下,实现平稳修改配置.最近一直在做location 配置,遇到优先级别问题(如果配置不当可能存在安全隐患哦),以下是个人学习一