温故而知新,可以为师矣!
1、问题出现场景
要求访问http://www.xxx.com的http协议二级域名、访问https://www.xxx.com的https协议的二级域名、访问http://xxx.com和访问https://xxx.com的顶级域名都能访问到同一资源且只能由域名来进行资源访问,但是实际访问过程中,使用顶级域名访问的时候并没有被代理到需要的资源上。
因为本地测试没有SSL证书的原因,不对http和https的访问做出测试只针对二级域名和顶级域名访问资源做测试
2、问题复现
正常访问情况是:
访问http://www.dongzi.com和http://dongzi.com能访问到下图所示资源

访问http://www.dongzi2.com和http://dongzi2.com能访问到下图所示资源

可实际情况不然!因为域名www.dongzi.com所定位的资源在服务中不能被修改,而想要定位其他资源只能另外解析域名来进行资源定位,故出现需要访问域名http://www.dongzi2.com和http://dongzi2.com定位到如下资源才算是成功。


实际出现结果是:
访问http://www.dongzi2.com资源定位正常,访问http://dongzi2.com的时候出现资源定位错误,如下图所示:

资源被定位到了其他页面!!! 这是为什么呢?
3、出现问题时主机(windows)域名解析、Nginx代理相关配置
hosts配置
127.0.0.1 www.dongzi.com dongzi.com
127.0.0.1 www.dongzi2.com dongzi2.com
nginx配置
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.dongzi.com;
location / {
alias D:/html/t1/;
index index.html;
}
}
server {
listen 80;
server_name www.dongzi2.com;
location / {
alias D:/html/t2/;
index index.html;
}
}
}
4、问题解决,修改Nginx代理配置
在代理主机server_name处加一个主机名配置:
server_name www.donngzi2.com dongzi2.com;
重新加载Nginx配置文件后,问题解决!此时访问dongzi2.com域名能正常访问到T2页面

5、问题出现原因
- 在nginx的
server_name找不到服务名的时候,会首先访问默认服务名default_server,如果未配置默认服务名此时会访问到第一个配置的服务名的资源。上面配置可以看出,第一个服务名访问的资源正是T1资源,这也就解释了为什么访问顶级域名的时候得到T1资源,因为dongzi2.com的server_name未被配置,也没有默认的default_server,所以访问到了第一个server_name对应的资源。
附:

163

被折叠的 条评论
为什么被折叠?



