nginx的server匹配规则
文章目录
nginx的server
块可以配置多个,那么一个请求该匹配那个server块呢,这主要是根据server块的server_name
和listen
来决定的。其中server_name
仅仅检查请求的“Host”头以决定该请求应由哪个虚拟主机来处理。
server {
listen 8001;
server_name www.baidu.com;
}
server {
listen 8001;
server_name *.com;
}
server {
listen 8001;
server_name baidu.*;
}
server {
listen 8001;
server_name ~^www\.baidu\.com$;
}
server {
listen 8001 default_server;
server_name _;
return 404;
}
相同listen端口的情况下,多个server的匹配顺序如下:
- 完全匹配优先级最高,匹配则终止
- 通配符在前的优先级其次,如
*.com
- 通配符在后的优先级次之,如
baidu.*
- 正则匹配优先级最低,如
~^www\.baidu\.com$
以上若都没有匹配,那么其会走默认的server,即:
- 优先选择listen配置项后有default或default_server的server,若没有则:
- 找到匹配listen端口的第一个server块