Apache配置HTTPS需三步:启用mod_ssl和mod_rewrite模块,将域名证书、私钥及证书链文件存至安全路径并设权限(私钥600),在:443虚拟主机中配置SSLEngine、证书路径及协议,再通过:80虚拟主机的Redirect permanent指令实现HTTP到HTTPS的301跳转,最后configtest验证并重启服务。

直接上手配 HTTPS,关键就三步:装模块、放证书、写配置。Apache 本身不自带 HTTPS 支持,必须手动启用 SSL 模块并正确引用证书文件,否则服务起不来或访问报错。
确认并启用 SSL 和 rewrite 模块
Apache 的 HTTPS 功能靠 ssl 模块提供,自动跳转(HTTP → HTTPS)则依赖 rewrite 模块。这两个模块必须显式启用:
- Debian/Ubuntu 系统执行:
sudo a2enmod ssl rewrite - CentOS/RHEL 系统通常已预装 mod_ssl,但需确认:运行
httpd -M | grep ssl,输出含ssl_module (shared)即表示已加载 - 检查
/etc/apache2/ports.conf(Ubuntu)或/etc/httpd/conf/httpd.conf(CentOS)中是否包含Listen 443,没有就手动加上
准备证书文件并设置权限
从证书机构(如 Let’s Encrypt、阿里云)下载的 Apache 格式证书,通常包括三个文件:
-
domain.crt(服务器证书) -
domain.key(私钥,必须严格保护) -
chain.crt或fullchain.pem(证书链,用于补全信任链)
建议统一存放到 /etc/apache2/ssl/(Ubuntu)或 /etc/pki/tls/certs/(CentOS),然后设置权限:
sudo mkdir -p /etc/apache2/sslsudo cp domain.crt domain.key chain.crt /etc/apache2/ssl/sudo chmod 644 /etc/apache2/ssl/domain.crt /etc/apache2/ssl/chain.crt-
sudo chmod 600 /etc/apache2/ssl/domain.key(私钥权限不能高于 600)
配置 HTTPS 虚拟主机
不要把 SSL 配置塞进监听 80 的 <VirtualHost *:80> 块里,必须单独建一个监听 443 的块:
- 编辑站点配置文件,例如
/etc/apache2/sites-available/example.conf - 添加如下内容(路径、域名按实际替换):
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domain.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain.key
SSLCertificateChainFile /etc/apache2/ssl/chain.crt
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
若要强制 HTTP 自动跳转 HTTPS,再加一个监听 80 的块:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
验证与重启
配置完成后务必验证语法再重启:
- 运行
sudo apache2ctl configtest(Ubuntu)或sudo httpd -t(CentOS),返回Syntax OK才安全 - 重启服务:
sudo systemctl restart apache2或sudo systemctl restart httpd - 检查 443 端口是否监听:
sudo ss -tlnp | grep :443 - 用浏览器访问
https://your-domain.com,确认锁图标正常显示;也可用curl -I https://your-domain.com查看响应头是否含200 OK


















