2.nginx的server_name匹配顺序

Posted 冷落街头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.nginx的server_name匹配顺序相关的知识,希望对你有一定的参考价值。

        小张和师父边走边聊,很快的,一座雄伟的都城便出现在了师徒两人的面前,没有流连于帝都的繁华,他们先来到了处理全国各地事务的“行政街”。有师傅的指引,小张到了一个府衙门口将信件交给了官差,很快便拿到了处理结果的回信。没想到处理的这么快,好奇之余加上师父之前给自己讲的nginx处理机制,便想要更加深入了解Nginx内部结构。


        老王告诉小张,国家每隔几年就会选拔优秀的邮差进入中央系统工作。而想要当一名优秀的邮差,准确地判断服务器名然后投递到对应的处理业务的“府衙”是一项必备技能,也是选拔考试必考的内容。小张听了不以为然,服务器名字和信封上的名字不是一一对应的吗?这不是很简单吗?


        这次任务中的服务器名字匹配是比较容易的一种--精确匹配,然而服务器名匹配并不全然如此。老王笑着拿起手中的信封”http://wyc.com/abc?name=li“,当wyc.com与多个指定的府衙名(服务器名)匹配时,有多种匹配规则,有可能顺序是:


1.精确的名称

2.以星号*开头的最长的通配符名称,例如:*.wyc.com

3.以星号*结尾的最长的通配符名称,例如:wyc.*

4.第一个匹配的正则表达式


通配符需要注意的是只能在开头和结尾包含一个星号,像www.*.wyc.com和w*.wyc.com是无效的。*星号可以匹配多个名称部分。名称*.wyc.com不仅能匹配www.wyc.com和www.abc.wyc.com,同时也可以省略*星号的写法,.wyc.com,这种用来匹配确切的名称wyc.com和*.wyc.com。

那么上面的两种写法是不是可以通过你说的正则表达式的方法来匹配?小张疑惑道。

是的,正则表达式的话,服务器名称必须以波浪号开头,否则将被认为是精确匹配,如果出现*,将被视为通配符名称,当然就想上面的例子一样,也可能是无效的。

正则表达式这么强大啊,但是这些~,&这些符号都是啥意思的?有能匹配到所有服务器名字的“府衙”吗?小张看着正则表达式写法的服务器名陷入了迷茫。

正则表达式稍后再讲,确实有特殊的服务器名可以匹配所有,既然来了“行政街”,首先带你去熟悉下各个府衙吧。说罢,师徒二人便消失在了人群中。


以上是关于2.nginx的server_name匹配顺序的主要内容,如果未能解决你的问题,请参考以下文章

Nginx中的一些匹配顺序总结

Nginx的虚拟服务器域名配置

请求怎么匹配到nginx配置的servername

nginx中server块的匹配顺序

五Nginx多Server反向代理配置

nginx配置注意事项