Apache2中HTTPS正常但HTTP无法访问的问题排查求助
结合你给出的虚拟主机配置,HTTPS正常但HTTP不通,大概率是以下几个环节出了问题,咱们一个个排查:
Apache没在监听80端口
先检查Apache的全局端口配置文件/etc/apache2/ports.conf,看看有没有Listen 80这一行。如果这行被注释掉了,Apache就不会监听80端口,自然无法响应HTTP请求。找到后去掉注释,然后重启Apache:sudo systemctl restart apache2。防火墙/安全组拦截了80端口
本地服务器的话,用sudo ufw status查看防火墙规则,确认80/tcp是允许状态;如果是云服务器,一定要检查服务商提供的安全组,确保入站规则里开放了80端口。如果没开,添加对应的规则就行。80端口被其他进程占用
用ss -tulpn | grep :80命令查看哪个进程在占用80端口——比如Nginx、其他Web服务甚至一些奇怪的程序都可能抢端口。如果发现不是Apache在占用,要么停止那个进程,要么调整对应服务的端口,把80留给Apache。80端口的虚拟主机配置没生效
你有没有启用这个80端口的虚拟主机配置?Apache需要用a2ensite命令启用站点配置文件,比如你的配置存在/etc/apache2/sites-available/mysite.conf里,就执行sudo a2ensite mysite.conf,然后重启Apache生效。另外还要确保/etc/apache2/sites-enabled/目录下有这个配置的软链接。浏览器缓存了强制HTTPS跳转
有时候之前配置过从HTTP跳转到HTTPS,浏览器会缓存301永久重定向规则,导致你访问HTTP时自动跳转到HTTPS,但实际Apache可能没响应。可以用命令行工具测试:curl -I http://mysite.com,看看返回的状态码。如果是301/302,那得检查80的虚拟主机配置里有没有不小心遗留的Rewrite规则。Apache服务局部异常
虽然HTTPS正常,但也有可能Apache的80端口监听线程出了小问题。可以先尝试重启Apache:sudo systemctl restart apache2,然后再访问HTTP地址看看有没有恢复。
内容的提问来源于stack exchange,提问作者StormTrooper

