参考连接:
nginx配置文件nginx.conf之server及server_name的意义详解_我在关山口开摇摇车的博客-CSDN博客
本人在学习nginx的时候被server_name的意义困扰了很久。又是查资料,又是请教人。最后还是自己测试出来的。
你搜到这篇文章说明你已经经过了基本的配置,但是还不懂其中的含义。
server name 为虚拟服务器的识别标志,匹配到特定的server块,转发到对应的应用服务器中去。
本文主要是解释server_name的意义,文章最后会解释server在整个访问请求的流程;请注意文中红色文字;
先上一段配置
客户端通过域名访问服务器时会将域名与被解析的ip一同放在请求中。当请求到了nginx中时。nginx会先去匹配ip,如果listen中没有找到对应的ip,就会通过域名进行匹配,匹配成功以后,再匹配端口。当这三步完成,就会找到对应的server的location对应的资源。
验证如下:
第一步:在客户端配置host,用于域名jie'xi
第二步:给虚拟机(服务端,以下这两个词会混用)配置另外三个ip,用于模拟多台服务器;
第三步:(非必须)
3个IP对应的域名如下,配置服务端的host文件便于测试
第四步:建立相关的nginx的文件
1.建立虚拟主机存放网页的根目录,并创建首页文件index.html
2.修改nginx.conf,将虚拟主机配置文件包含进主文件
客户端访问结果如下
可以使用ip和域名访问。但是是使用的ip进行匹配。
3.把server中的ip都删除,把server_name的注释都解开。重启nginx。再访问,发现用域名能访问到对应的资源。
但是使用ip就只会出现192.168.231.151的资源
这是因为通过其他ip也能请求到nginx,但是匹配不到相应的server,这个时候就会使用第一个server。
4.将 server_name = http://www.test153.com 的server的listen加上ip 192.168.231.152:80 ,重启nginx。
这个时候使用http://www.test152.com,或者192.168.231.152进行访问就可以得到 server_name = http://www.test153.com 的资源。
但是使用http://www.test153.com访问的到的是151的资源
所以我们得出的结论是,如果server中配置了ip,那么我们就使用客户端带来的ip进行匹配,这个时候server_name失效。
————————————————————————————————————————————
分割线
——————————————————————————————————————————————
看到评论中还有很多疑惑我来解释下吧;
1、一台服务器可以配置多个ip
2、一个ip可以有多个域名;
3、文中一台虚拟机配置了多个ip是为了模拟局域网中其他服务器;而不是为了秀一个服务器可以配置多个ip,这样干在实际中没啥意义;
4、实际操作中一般将 listen 后面接端口而不接ip,因为接了ip后就只能通过ip匹配到相对应的server;
5、举例说明
首先我们在其他电脑上输入 http://www.test151.com:90访问nginx时,这个时候找到的就是当前这个server代码;nginx所在服务器上会有配置host文件,里面会写上http://www.test151.com指向的是局域网中的那台机器,这个时候nginx就会将请求转发到host中所配置的服务器的相应端口中;