nginx中server_name的作用

阅读更多

 

先上例子

nginx部署在局域网中192.168.2.4的服务器上,修改nginx.conf配置文件,添加3个server,然后执行命令nginx -s reload重新加载nginx服务

      server {
         listen       80;
         server_name  localhost;
         location / {
            root   html;
             index  index.html index.htm;
         }
       }
	server {
		listen 80;
		server_name www.zkh.*;
		location / {
			root   html;
                        index  index1.html;
		}
	}
	server {
		listen  80;
		server_name www.zkh.com;
		location / {
			root   html;
                        index  index2.html;
		}
	}

 

在nginx的html目录下添加index1.html和index2.html页面 

 

本地机器ip:192.168.5.158(不重要),修改C:\Windows\System32\drivers\etc目录下的hosts文件(linux的hosts文件在/etc目录下),在末尾添加DNS记录

192.168.2.4	 www.zkh.com
192.168.2.4	 www.zkh.org

 

结果

 

本地机器浏览器访问www.zkh.com返回index2.html,访问www.zkh.org返回index1.html,访问192.168.2.4返回index.html

 

 

分析

打开浏览器调试模式,可以看到当浏览器访问www.zkh.com时,Request Header的host属性值为www.zkh.com

 

在开始处理一个http请求时,nginx会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,然后根据内定的匹配优先级排序,以此决定到底由哪一个server块来处理这个请求。当然选择一个server的前提是访问端口跟server中listen的端口对应。

 

匹配顺序

server_name与host匹配优先级如下(前提是浏览器访问端口与serverlisten端口一致):

 

1、完全匹配

2、通配符在前的,如*.test.com

3、在后的,如www.test.*

4、正则匹配,如~^\.www\.test\.com$

 

如果都不匹配

1、优先选择listen配置项后有default或default_server的 

         如 listen 80 default;而且每个端口只能设置一个default否则报错

2、找到匹配listen端口的第一个server块

 

 

你可能感兴趣的:(nginx中server_name的作用)