Apache 的 HTTPS 虚拟主机端口设置怎么配置

作者:袖梨 2026-07-10
配置Apache HTTPS虚拟主机需四步:启用443端口监听并加载ssl、socache_shmcb模块;准备有效SSL证书(如Let’s Encrypt或自签名);编写VirtualHost配置指定证书路径、域名和根目录;启用站点、重定向HTTP至HTTPS并开放防火墙443端口。

配置 Apache 的 HTTPS 虚拟主机,核心是启用 443 端口监听、加载 SSL 模块、提供有效证书,并绑定到指定域名。它不是单纯“改端口”,而是端口 + 协议 + 证书 + 域名四者协同生效。

确认并启用 HTTPS 所需模块与端口

Apache 必须明确知道要监听 443 端口,并支持 SSL/TLS 协议:

  • 编辑主配置文件(如 /etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf),确保包含:
    Listen 443
  • 确认已加载必要模块:
    LoadModule ssl_module modules/mod_ssl.so
    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so(用于会话缓存,避免警告)
  • 检查是否已启用 SSL 配置入口,例如:
    Include /etc/apache2/mods-enabled/ssl.confIncludeOptional conf-available/*.conf

准备 SSL 证书文件

HTTPS 必须有证书才能建立加密连接。可选方式包括:

  • 使用 Let’s Encrypt 免费证书(推荐):
    运行 sudo certbot --apache -d example.com -d www.example.com,自动完成申请、部署和配置
  • 自签名测试证书(仅限开发):
    sudo mkdir -p /etc/apache2/ssl
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
    -keyout /etc/apache2/ssl/example.com.key
    -out /etc/apache2/ssl/example.com.crt
  • 商业证书:将 .crt(公钥)、.key(私钥)、以及可选的 .ca-bundle(中间证书)统一存放到安全路径,如 /etc/apache2/ssl/

编写 HTTPS 虚拟主机配置

新建配置文件(如 /etc/apache2/sites-available/example.com-ssl.conf),内容需包含:

  • 明确声明监听 *:443,并开启 SSL:
    <VirtualHost *:443>
    SSLEngine on
  • 正确指向证书路径:
    SSLCertificateFile /etc/apache2/ssl/example.com.crt
    SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
    如有中间证书,加一行: SSLCertificateChainFile /etc/apache2/ssl/example.com.ca-bundle
  • 设置域名与网站根目录:
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
  • 赋予目录访问权限:
    <Directory /var/www/example.com/public_html>
    Require all granted
    </Directory>

启用配置并强制 HTTPS 访问

配置写完后必须显式启用,并建议引导用户走 HTTPS:

  • 启用站点(Debian/Ubuntu):
    sudo a2ensite example.com-ssl.conf
    sudo a2enmod ssl rewrite
  • 重载服务:
    sudo systemctl reload apache2
  • 添加 HTTP → HTTPS 重定向(在对应 HTTP 站点的 <VirtualHost *:80> 中加入):
    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L]
  • 别忘了放行防火墙的 443 端口:
    sudo ufw allow 443/tcp(Ubuntu)或
    sudo firewall-cmd --add-port=443/tcp --permanent && sudo firewall-cmd --reload(CentOS/RHEL)

相关文章

精彩推荐