今天有人反映官网在登陆的时候,chrome浏览器不能正常打开页面,反而会出现一个下载框。我使用IE浏览器尝试登录官网,页面也不是正常的页面,而是下面的内容:


一次官网打不开的经历_第1张图片


由于官网的域名跳转是在阿里云的域名解析的地方配置的,于是就登陆到阿里云的域名解析地方,查看了一下发现,这里的配置是www.lechange.com 会302跳转到 home.lechange.com,而ping一下home.lechange.com ping得到的ip地址是一个负载均衡的地址,然后在阿里云的控制台查询这个负载均衡的情况,发现这个负载均衡后面挂载的是两台服务器A和B。


于是我在浏览器里面直接输入负载均衡的ip地址,发现还是像上面那样错误的php界面,而浏览器地址栏使用两个服务器的外网ip却是正常可以打开的。这个时候初步怀疑是SLB的问题,而我当时就觉得就凭上面这一点就去跟阿里撕逼不太妥当,但是事实告诉我们事情不是那么简单的。


我检查一下slb的端口配置情况,分别是http 80转8080和https 443转80,可见这个网站有两个协议,一个是http的而一个是https的,我们刚才虽然在浏览器里直接使用A和B的外网ip访问是可以正常打开页面,只能说明http协议是OK的,我们还要测试一下https协议访问的效果。


我就在浏览器地址栏里进一步尝试,发现A外网ip:8080 是OK的,而B外网ip:8080 就是PHP的文字界面。于是基本问题定位到B服务器里有文件的配置错误。


登陆到B服务器里,在nginx的conf文件夹里发现一个多余的文件,打开内容如下:

server 
{ 
        listen       8080; 
        server_name  www.lechange.com (file://www.lechange.com/) www.lechangebuy.com (file://www.lechangebuy.com/); 
        index index.html index.htm index.php; 
        root  /data/www/ecstore; 
        add_header  pos 'web2'; 
#       location / { 
#               rewrite ^/(.*)$ https://www.lechangebuy.com/$1; 
#       } 
        location /public { 
                root  /data/www/ecstore; 
        } 
        access_log /data/logs/nginx/access.log; 
#access_log off; 
}

而原来nginx是有正常的conf文件,现在又多余了一个这个文件,可见是两个文件都在占用8080端口时出现了冲突,所以就导致这样php界面的情况。删除这个多余的文件后,重启nginx,清除浏览器缓存,再重新尝试就正常打开页面了。


为什么会多一个这样的文件,后来把各位运维人员严刑拷打一顿才知道,原来有一次某运维小弟在B服务器里面做跳转的测试,测试完毕之后忘记了把这个多余的文件删除,原本这一切是没有问题的,但是可能服务器nginx经历了重启,于是就加载了这两个conf文件,就把这个隐藏的问题暴露了。