Nginx的server_name匹配规则
来源:原创 更新时间:2018-10-08 10:32:26 编辑:琳兮 浏览:1945
在开始处理一个HTTP请求时,Nginx会读取header(请求头)中的host,与每个server中的server_name进行匹配,,来决定用哪一个server标签来完成处理这个请求。有可能一个Host与多个server中的server_name都匹配,这个时候就会更具匹配优先级来选择实际处理的server块。优先级匹配结果如下:
1,首先选择所有的字符串完全匹配的server_name。(完全匹配)
2,选择通配符在前面的server_name,如*.sentinel.org.cn
3,选择通配符在后面的server_name,如sentinel.*
4,最后选择使用正则表达式匹配的server_name
5,如果全部都没有匹配到,那么将选择在listen配置项后加入[default|default_server]的server块。
6,如果没写,那么就找到匹配listen端口的第一个server块
测试server_name的匹配规则
[root@web01-7 conf.d]# cat server_test.conf server { listen 80; server_name www.sentinel.org; location / { root /usr/share/nginx/html/admin; index index1.html; }}server { listen 80; server_name *.sentinel.org; location / { root /usr/share/nginx/html/admin; index index2.html; }}server { listen 80; server_name www.sentinel.*; location / { root /usr/share/nginx/html/admin; index index3.html; }}server { listen 80; server_name ~\.sentinel\.org$; location / { root /usr/share/nginx/html/admin; index index4.html; }}[root@web01-7 admin]# awk '{print FILENAME": "$0}' index* index1.html: www.sentinel.org index2.html: *.sentinel.org index3.html: www.sentinel.*index4.html: ~ \.sentinel\.org$
测试
1,配置文件全部不注释,server_name完全匹配优先级高
[Linuxbaodian]~ $ curl www.sentinel.org www.sentinel.org
2,注释掉完全匹配的行
[Linuxbaodian]~ $ curl www.sentinel.org *.sentinel.org
3,注释掉完全匹配和通配符在前面的匹配项
[Linuxbaodian]~ $ curl www.sentinel.org www.sentinel.*
4,只剩下正则匹配的了
[Linuxbaodian]~ $ curl www.sentinel.org ~ \.sentinel\.org$
5,等到全部都注视掉之后看看他找谁
什么资源都找不到了