apache https虚拟主机配置核心是启用ssl、指定证书路径、禁用老旧协议、设置安全加密套件,必须与证书文件位置、域名及服务器环境严格匹配,需包含servername、sslengine on、sslprotocol、sslciphersuite、sslcertificatefile、sslcertificatekeyfile等关键指令,并确保私钥权限为600、防火墙开放443端口、mod_ssl已启用。

Apache 的 HTTPS 虚拟主机(<virtualhost></virtualhost>)配置核心是启用 SSL、指定证书路径、禁用老旧协议、设置安全加密套件。不能只复制模板,必须与你的证书文件位置、域名、服务器环境严格匹配。
必须包含的 <virtualhost></virtualhost> 基础结构
<virtualhost>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# SSLCertificateChainFile 已被 modern Apache 2.4.8+ 废弃,fullchain.pem 已含链,无需单独配置
ErrorLog ${APACHE_LOG_DIR}/example.com-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-ssl-access.log combined
</virtualhost>
-
ServerName必须与你申请证书的主域名完全一致(如example.com),否则浏览器会提示证书不匹配 -
SSLCertificateFile指向的是完整证书链文件(含域名证书 + 中间 CA),不是单个.crt;Let’s Encrypt 默认用fullchain.pem,商业证书通常需合并为一个文件或按厂商说明使用chain.crt -
SSLCertificateKeyFile是私钥,权限必须为600(sudo chmod 600 /path/to/privkey.pem) -
SSLProtocol显式禁用已淘汰的协议,避免降级攻击 -
SSLCipherSuite推荐使用现代前向保密套件,优先 ECDHE,禁用 RC4、MD5、NULL 加密
多域名共用同一证书时的写法
若证书同时覆盖 example.com 和 www.example.com(即 SAN 证书),只需在 ServerAlias 中列出:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
ServerName example.com ServerAlias www.example.com
不需要额外 <virtualhost></virtualhost>。多个不同域名(如 a.com 和 b.com)需各自独立的 <virtualhost></virtualhost> 块,且各配对应证书路径。
HTTP 自动跳转 HTTPS 的配套写法(写在 *:80 虚拟主机中)
<virtualhost>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</virtualhost>
- 使用
Redirect permanent比.htaccess或mod_rewrite更高效、更可靠 - 确保该
*:80块与*:443块的ServerName一致,否则跳转会失败或指向错误域名
验证与重启前的关键检查
- 运行
sudo apache2ctl configtest(Debian/Ubuntu)或sudo httpd -t(RHEL/CentOS)确认语法无误 - 检查证书路径是否存在、权限是否正确(尤其私钥不可被组/其他读取)
- 确认
mod_ssl已启用:sudo a2enmod ssl或检查/etc/httpd/conf.modules.d/00-ssl.conf是否加载 - 防火墙放行 443 端口:
sudo ufw allow 443或sudo firewall-cmd --add-port=443/tcp --permanent && sudo firewall-cmd --reload
不复杂但容易忽略细节。证书路径错一位、协议没禁用 TLSv1、私钥权限不对——任何一个都可能让 HTTPS 黑屏或报 ERR_SSL_PROTOCOL_ERROR。










