nginx中server_name的作用
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块