You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16.04虚拟机下带VirtualDocumentRoot的SSL虚拟主机配置问题

解决动态虚拟主机下的HTTPS配置问题(适配*.dev通配符场景)

我来帮你搞定这个适配动态虚拟主机的HTTPS配置问题,完美匹配你现在用的VirtualDocumentRoot和*.dev域名的开发场景!

1. 生成通配符自签名SSL证书

这是最高效的方案,一次生成就能覆盖所有.dev域名,不用逐个项目折腾。执行以下命令:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/dev-wildcard.key -out /etc/ssl/certs/dev-wildcard.crt
  • 注意在Common Name字段填写*.dev,这是通配符生效的关键
  • 生成的文件路径:
    • 私钥:/etc/ssl/private/dev-wildcard.key
    • 证书:/etc/ssl/certs/dev-wildcard.crt

2. 配置Apache HTTPS动态虚拟主机

Ubuntu 16.04的Apache自带SSL站点模板,咱们复制一份修改成适配动态文档根的配置:

sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf

编辑这个新文件,替换成以下内容:

<VirtualHost *:443>
    # 和HTTP虚拟主机完全一致的动态文档根规则
    VirtualDocumentRoot /home/steve/websites/%-2/%-2/public_html
    ServerAlias *.dev

    # 启用SSL并绑定通配符证书
    SSLEngine on
    SSLCertificateFile      /etc/ssl/certs/dev-wildcard.crt
    SSLCertificateKeyFile   /etc/ssl/private/dev-wildcard.key

    # 开发环境简化版SSL安全配置(可选)
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLProtocol all -SSLv2 -SSLv3
</VirtualHost>

3. 启用模块并重启Apache

执行以下命令让配置生效:

sudo a2enmod ssl
sudo a2ensite 000-default-ssl.conf
sudo systemctl restart apache2

4. 处理项目强制HTTPS的调试问题

现在HTTPS站点已经能跑了,但部分项目的源码或.htaccess强制跳转HTTPS会影响调试,给你两个实用方案:

方案A:Apache层面跳过强制跳转(不修改项目代码)

在你的HTTP虚拟主机配置000-default.conf中添加环境变量和规则:

<VirtualHost *:80>
    VirtualDocumentRoot /home/steve/websites/%-2/%-2/public_html
    ServerAlias *.dev

    # 标记开发环境
    SetEnv DEV_ENV true
    RewriteEngine On
    # 针对开发环境反向处理强制跳转规则
    RewriteCond %{ENV:DEV_ENV} true
    RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [L]
</VirtualHost>

然后在项目的.htaccess或源码中,判断DEV_ENV变量,开发环境就不执行强制HTTPS逻辑。

方案B:修改项目的强制跳转规则(更直接)

在项目的.htaccess中添加域名判断,只在非开发环境跳转:

RewriteEngine On
# 仅在非.dev域名下强制HTTPS
RewriteCond %{HTTP_HOST} !\.dev$
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]

如果是PHP项目,也可以在源码里做判断:

// 开发环境跳过强制HTTPS
if (strpos($_SERVER['HTTP_HOST'], '.dev') === false && (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on')) {
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
}

5. 验证配置

现在你只需要:

  • 确保hosts文件里的.dev域名都指向127.0.0.1
  • 浏览器访问https://somesite.dev,虽然会提示证书不安全(自签名证书的正常现象),选择“继续访问”即可看到站点
  • 新增项目时,依然按原来的流程创建目录和hosts条目,HTTPS会自动适配

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:59