今天,正在考虑要一个程序,然后看到微信图标闪动,打开看是一个朋友发了一条消息,是他运营的网站地址,下意识打开,显示无法访问。
此时收到第二条消息,大概就是说网站无法打开了,不知道什么原因,好像是突然就不能用了。
因为这个站上个月添加了SSL证书,当时是没有强制开启https访问,所以在浏览器修改了地址,使用http://方式访问,发现竟然可以打开,也就是采用https访问时无法打开,去掉s后就可以,感觉不可思议。
下面开始排查,网站能访问,就说明服务器基础环境是没问题的,重点查看SSL证书部署,ping了域名解析的IP没问题,检查了证书信息未过期部署也正常,检查nginx配置代码正常,检查服务器端口443配置正常,打开宝塔运维平台的安全页面,防火墙部分配置如下:
当时没太留意这个“未使用”,只是看到有配置放行,就以为没问题。
各种配置或者能想到有问题的地方都检查了,依旧无法确定是何原因导致的不能访问。
在网站访问入库index.php文件,在第一行加入调试语句,访问http网址,输出了调试信息,但是输入https网址仍然是显示打不开。不过通过此方法可以确定,应该是在nginx这里出现了问题,导致了错误,所以并未去解析PHP文件。
但是接下来怎么定位是什么问题,没有任何想法。那就先搜索一下,进行百度谷歌以后,找到个提示信息,可以使用wget分别访问http和https网址,查看是否有区别。
在本地访问结果如下:
然后又在服务器执行后结果如下:
可以看到访问http返回200数据正常,访问https后有报错,所以会导致无法打开。
可是仅查看这个返回的错误信息还是无法确定是什么问题,继续百度、谷歌,不过这次没找到多少有用的信息,但是基本上都把矛头指向了nginx服务,因为服务器是采用宝塔搭建的web服务器环境,一度怀疑是宝塔有问题,到其官网搜索了一番,不过也没收货。
然后就打算把nginx重启一下,实在不行就卸载重装,到宝塔面板重启nginx,发现了新的报错信息:bind() to 0.0.0.0:80 failed (98: Address already in use),这个错误就比较明显了,简单搜索也基本能确定是80端口被占用导致的报错。
发现这个问题后,突然就想到这个服务器原来是安装了独立nginx服务,后来因为站点管理太麻烦,就又安装了宝塔面板及宝塔里的nginx,将原来的nginx服务关停了,当时访问没问题就没理会安装了两个nginx的问题。
这时又想起上面的安全页面截图,443端口虽然放行了但是显示未使用,可见服务器目前运行的nginx不是宝塔内安装的nginx,而是原来的nginx,查看服务器日志,果然服务器昨天重启过,也就是启动后nginx运行了旧版的,而旧的nginx并没有配置SSL相关内容,基本可以确定应该就是nginx旧版的问题了。
打开服务器命令行,执行 ps -e | grep nginx,确实有两个。执行 kill -9 | 线程号,然后再到宝塔内重启nginx,这次没有报错,并且到安全页面查看443端口显示“正常”并不是“未使用”了,再次到浏览器访问https网站地址,熟悉的网页显示出来了。
至此问题解决。可以看到这个问题不难解决,难的是如何发现问题的根本原因,从看到问题,到发现问题所在,中间走了不少弯路,因此记录以上过程备忘。