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、优先选择listen配置项后有default或default_server的
2、找到匹配listen端口的第一个server块
备注:
1、nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。
2、location语法规则:
location [=|~|~*|^~] /uri/ { … }
=
开头表示精确匹配
^~
开头表示uri以某个常规字符串开头,理解为匹配 url路径即可
~
表示区分大小写的正则匹配
~*
表示不区分大小写的正则匹配
!~
和!~*
分别为区分大小写不匹配及不区分大小写不匹配 的正则
/
通用匹配,任何请求都会匹配到。
如果匹配规则以^
开头,就是匹配以指定字符串开头的路径,如果没有就是匹配url中的内容是否包含指定字符串
如果匹配规则以$
结尾,就是匹配以指定字符串结尾的路径
多个location配置的情况下匹配顺序为(当有匹配成功时候,停止匹配,按当前匹配规则处理请求):
- 优先匹配
=
- 其次匹配
^~
- 按照文件中的匹配顺序执行
- 最后匹配
/
Location 官网:http://nginx.org/en/docs/http/ngx_http_core_module.html#location