HTTP 瘫痪,而 HTTPS 不会瘫痪的原因是什么?

HTTP 瘫痪,而 HTTPS 不会瘫痪的原因是什么?

我上班时遇到了一个以前从未遇到过的问题,并且很好奇这里是否有人知道是什么原因导致了这个问题。

我们从 Slicehost 运行 VPS,昨天某个时候,我们托管的网站瘫痪了(自从我对服务器做了任何操作后,几个月来一直运行正常),但只有那些通过 HTTP(使用端口 8080)的网站瘫痪了。HTTPS 网站(标准端口)仍可运行,如果他们使用以下方式进行访问https://site.com(而不是输入 site.com 并让重定向完成工作),以及直接与服务器的 SSH 连接。

直到今天早上,情况一直如此。我重启了服务器,但没用。我通过 SSH 进入服务器,确保一切正常运行。我检查的 Nginx 日志或其他日志中没有异常的错误消息。但什么也没变。然后,大约半小时后,当我正在查找原因时,网站突然又开始工作了。

我从未找到任何可能导致该问题的原因(我发现的所有问题都是客户端问题),所以我很好奇是什么可能导致了该问题。这样,如果再次发生类似的事情,我就可以更好地诊断和修复它。

答案1

几乎任何事情都可能导致问题。除非有人碰巧遇到过同样的问题,且原因相同,否则您可能无法得到所提问题的答案。

不过,为了帮助您下次找到问题的根源,这里有一些诊断技巧:

  • 首先,网络流量是否真的到达服务器? tcpdump -i ethN -n port 8080然后尝试发出请求。如果tcpdump没有显示任何内容,则说明是网络问题。麻烦 Softlayer。
  • 如果流量确实通过,请运行iptables -L INPUT -v >/tmp/before,访问网站,运行iptables -L INPUT -v >/tmp/after,然后diff /tmp/before /tmp/after。数据包/字节数的任何差异都表明可能的防火墙规则阻止了流量。您需要验证每条规则,以确定它是否是导致问题的原因。(这就是为什么记录防火墙阻止是个好主意;这会使这类事情变得容易得多)。
  • 运行netstat -ltnp |grep :8080以验证 nginx 确实在监听感兴趣的端口,并且正在监听正确的 IP。在这个阶段,不要想当然。
  • 如果没有防火墙规则阻止流量,并且您认为应该监听的进程正在监听,那么stracenginx 进程(strace -p <pid> -p <pid>对于所有与 nginx 关联的进程)将确保它们是否获取了流量,并查看它们是否(以及什么)正在对此执行操作。

相关内容