欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

Nginx的server_name匹配规则

来源:原创    更新时间:2018-10-08 10:32:26    编辑:琳兮    浏览:1145

在开始处理一个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,等到全部都注视掉之后看看他找谁
什么资源都找不到了


评论区

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

相关内容

点击排行

随机新闻

评论排行榜