Nginx中的一些匹配顺序
Nginx中经常需要做各种配置,总结如下:
1、server_name配置
nginx中的server_name指令主要用于配置基于名称虚拟主机,同一个Nginx虚拟主机中,可以绑定多个server_name,各个域名用空格隔开即可。如下:
server
{
listen ;
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地址。
Nginx中的一些匹配顺序的更多相关文章
- Nginx 中 location 的匹配顺序
nginx中location的匹配模式有以下几种: 精确匹配:以=开头,只有完全匹配才能生效,例子location = /uri 非正则匹配:以^~开头,^表示非.~表示正则,例子location ^ ...
- nginx中server的匹配顺序
在开始处理一个http请求时,nginx会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求. ...
- Nginx中的 location 匹配和 rewrite 重写跳转
Nginx中的location匹配和rewrite重写跳转 1.常用的Nginx正则表达式 2.location 3.rewrite 4.rewrite实例 1.常用的Nginx正则表达式: ^ :匹 ...
- nginx 的location的匹配顺序
匹配规则 匹配顺序 示例 [root@python vhast]# cat test.conf server { server_name haha.com; #listen 8080; rewrite ...
- nginx中的location匹配规则
概述: 1. location在nginx配置文件中的作用是根据用户请求的URI来执行不同的应用. 2.URI的定义:标识.定位任何资源的字符串 协议://域名/目录a/目录b/文件c http:// ...
- Nginx中虚拟主机配置
一.Nginx中虚拟主机配置 1.基于域名的虚拟主机配置 1.修改宿主机的hosts文件(系统盘/windows/system32/driver/etc/HOSTS) linux : vim /etc ...
- nginx中location匹配顺序
一.location语法 语法: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: - ...
- nginx中server块的匹配顺序
客户端发出一个http请求时,nginx收到后会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请 ...
- Nginx location 匹配顺序整理
Nginx location模块整理 具体的Nginx安装就不在这里描述了,这里只是为了对location的描述 Nginx环境 a. 查看当前系统cat /etc/redhat-release [r ...
随机推荐
- CDH集群主节点宕机恢复
1 情况概述 公司的开发集群在周末莫名其妙的主节点Hadoop-1的启动固态盘挂了,由于CM.HDFS的NameNode.HBase的Master都安装在Hadoop-1,导致了整个集群都 ...
- 7.6 数据注解特性--StringLength
StringLength attribute can be applied to a string type property of a class. EF Code-First will set t ...
- 优化MySchool数据库设计
第一章 数据库的设计 1.E-R图中: 矩形:实体 椭圆:属性 菱形:关系 直线:连接实体,属性和关系 2.映射基数 一对多 多对一 多对多 3.范式: 第一范式:确保每列的原子性 第二范式:确保表中 ...
- 【手记】未能从程序集System.Net.Http.Formatting中加载类型System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter
实际报错如图: 如果你跟我一样是在折腾Asp.Net WebApi 2.x时遇到这个问题,请参看如下办法: 删除现有System.Net.Http.Formatting引用(如果引用了的话) 重新引用 ...
- PHP5各个版本的新功能和新特性总结
因为 PHP 那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣.本文将会介绍自 PHP5.2 起,直至 PHP5.6 中增加的新特征 本文目录:PHP5.2 以前:auto ...
- 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
[源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹 ...
- socket编程-java
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- win7下 VirtualBox虚拟机开机后台自启动
win7下安装个linux虚拟机,学习下非常好. 但是每次使用linux的时候,都是打开virtualBox-->启动安装的linux系统-->再用远程桌面(SSH等)连接 每次手动打开比 ...
- ABP之模块分析
本篇作为我ABP介绍的第三篇文章,这次想讲下模块的,ABP文档已经有模块这方面的介绍,但是它只讲到如何使用模块,我想详细讲解下它模块的设计思路. ABP 框架提供了创建和组装模块的基础,一个模块能够依 ...
- java web学习总结(六) -------------------servlet开发(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...