Ubuntu 20.04.5 LTS(WSL2)上的Apache2.4.41突然无法通过HTTPS提供服务
遇到这种毫无征兆就罢工的情况确实挺头疼的,毕竟之前正常跑了好几个月还没碰过配置。咱们一步步拆解排查,先从最基础的点开始:
1. 确认SSL模块是否正常加载
你的配置里用了<IfModule mod_ssl.c>,但说不定模块悄悄没加载上?先跑个命令验证:
apache2ctl -M | grep ssl
如果输出里没有ssl_module (shared),那就手动启用模块再重启Apache:
sudo a2enmod ssl sudo systemctl restart apache2
2. 检查Apache是否真的在监听443端口
虽然你用telnet能连上,但还是确认下Apache的监听状态更稳妥:
sudo ss -tulpn | grep :443
看看输出里有没有apache2进程在监听0.0.0.0:443或者:::443(全地址监听),如果只有127.0.0.1:443的话,Windows主机就没法正常访问,但你telnet本地IP能通,大概率不是这个问题,但还是确认下更安心。
3. 证书文件的权限是否合规
你重新生成了证书,但权限不对也会导致Apache没法正常读取。分别检查证书和密钥的权限:
ls -l /etc/ssl/certs/apache-selfsigned.crt ls -l /etc/ssl/private/apache-selfsigned.key
密钥文件(.key)必须是root:root所有,权限设为600(只有root能读写);证书文件(.crt)可以是644权限。如果权限不对,修正一下:
sudo chmod 600 /etc/ssl/private/apache-selfsigned.key sudo chown root:root /etc/ssl/private/apache-selfsigned.key sudo chmod 644 /etc/ssl/certs/apache-selfsigned.crt
改完记得重启Apache。
4. WSL2的网络和防火墙问题
WSL2的网络有时候会抽风,尤其是和Windows防火墙的交互:
- 检查Windows防火墙:看看是否允许**vEthernet (WSL)**适配器的443端口入站连接,要是没开的话手动添加规则。
- 重启WSL2:有时候网络栈出问题,直接 shutdown 再启动就能解决:
然后重新打开WSL终端,启动Apache试试。# 在Windows命令行或者PowerShell里运行 wsl --shutdown - 检查域名解析:你用的
penguin.linux.test,运行ping penguin.linux.test看看解析的IP是不是当前WSL2的IP——WSL2重启后IP会变,如果hosts文件里是旧IP,那肯定访问不了,需要更新hosts。
5. 浏览器端的问题(重点看这个!)
你的access.log里已经有172.27.224.1的GET请求返回了200,说明Apache其实已经把内容发出去了,但浏览器没显示。这大概率是浏览器的问题:
- 试试用无痕模式访问,避免缓存干扰;
- 检查Chrome的证书信任:之前信任过的自签名证书可能过期或者被浏览器重置了,在地址栏点击「不安全」提示,手动重新信任证书;
- 用
wget测试:在WSL里跑wget --no-check-certificate https://penguin.linux.test/src/,看看能不能正常下载内容——如果能,那基本就是浏览器的SSL拦截问题了。
6. 确认虚拟主机配置是否生效
最后再确认下你的站点配置是否真的被Apache加载了:
sudo a2ensite 你的站点配置文件名.conf sudo systemctl restart apache2 apache2ctl -S
看输出里有没有penguin.linux.test对应的443虚拟主机,如果没有,说明配置没被正确启用,检查配置文件名是不是.conf后缀,有没有放在/etc/apache2/sites-available/里。
备注:内容来源于stack exchange,提问作者mgiuffrida

