Apache默认同时监听80和443端口需满足三条件:配置文件中启用未注释的Listen 80与Listen 443指令、存在对应<VirtualHost *:80>和<VirtualHost *:443>块(后者须含SSL配置)、ssl_module等必要模块已加载;缺一不可。
apache 默认就同时监听 80(http)和 443(https)端口,前提是配置文件中明确启用了这两行 listen 指令,并且有对应端口的 <virtualhost> 块。如果你发现只响应一个端口,说明配置不完整或被注释/覆盖了。
确认并启用两个 Listen 指令
打开主配置文件(CentOS/RHEL 是 /etc/httpd/conf/httpd.conf,Ubuntu/Debian 通常是 /etc/apache2/ports.conf),确保包含以下两行且**未被注释**:
Listen 80Listen 443
如果只看到其中一行,补上缺失的;如果某行前面有 #,删掉它。注意:不要写成 Listen *:80 或 Listen 0.0.0.0:443 这类带地址前缀的写法,除非你有明确绑定需求——默认 Listen 80 已等价于监听所有 IPv4/IPv6 接口的 80 端口。
配置两个匹配的 VirtualHost 块
仅写 Listen 不够,还必须有对应端口的虚拟主机定义,否则请求无法路由。检查站点配置文件(如 /etc/apache2/sites-enabled/000-default.conf 或 /etc/httpd/conf.d/ssl.conf)中是否存在:
- 一个
<VirtualHost *:80>块,处理普通 HTTP 请求 - 一个
<VirtualHost *:443>块,处理 HTTPS 请求,并包含 SSL 相关指令(如SSLEngine on、SSLCertificateFile、SSLCertificateKeyFile)
如果只有 *:80 而没有 *:443,浏览器访问 https:// 会直接连接失败(Connection refused);反之,若 *:443 缺少 SSL 配置,Apache 启动时会报错并拒绝加载。
检查模块是否已加载
HTTPS 依赖 ssl_module 和 socache_shmcb_module(或其他 socache 模块)。运行以下命令确认:
- Ubuntu/Debian:
a2enmod ssl && a2enmod socache_shmcb,然后sudo systemctl restart apache2 - CentOS/RHEL:
sudo httpd -M | grep -E "(ssl|socache)",若无输出,需在httpd.conf中取消LoadModule ssl_module modules/mod_ssl.so等行的注释
模块未启用会导致 SSLEngine 指令不被识别,进而使 *:443 配置失效。
验证监听状态与防火墙
重启服务后,用命令确认两个端口都在监听:
sudo ss -tuln | grep -E ':80|:443'- 应看到两行输出,分别含
:80和:443,状态为LISTEN
另外,别忘了检查系统防火墙(firewalld / ufw)和云平台安全组(如阿里云 ECS)是否放行了这两个端口。仅 Apache 配置正确,但防火墙拦截,外部仍无法访问。


















