nginx中server_name的作用

转:

nginx中server_name的作用

 

 

先上例子

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

Java代码  收藏代码
  1.      server {  
  2.         listen       80;  
  3.         server_name  localhost;  
  4.         location / {  
  5.            root   html;  
  6.             index  index.html index.htm;  
  7.         }  
  8.       }  
  9. server {  
  10.     listen 80;  
  11.     server_name www.zkh.*;  
  12.     location / {  
  13.         root   html;  
  14.                        index  index1.html;  
  15.     }  
  16. }  
  17. server {  
  18.     listen  80;  
  19.     server_name www.zkh.com;  
  20.     location / {  
  21.         root   html;  
  22.                        index  index2.html;  
  23.     }  
  24. }  

 

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

 

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

Java代码  收藏代码
  1. 192.168.2.4  www.zkh.com  
  2. 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块

 

posted @ 2022-12-09 14:59  BBS_自律  阅读(1669)  评论(0编辑  收藏  举报