如何配置domain2(server2)指向domain1(server1)并创建两个带SSL的子域名应用
解决方案步骤
1. 修正DNS记录配置逻辑
先明确主域名与子域名的指向规则,避免URL转发导致的SSL冲突:
- 主域名
domain2.com:配置A/AAAA记录指向server1的固定公网IP(第三方托管服务器的IP) - 子域名
app1.domain2.com、app2.domain2.com:直接配置A/AAAA记录指向server2的公网IP
注意:禁止使用URL转发/301跳转配置子域名,这种方式会让浏览器先访问托管商服务器,再跳转至server2,导致SSL证书不匹配(浏览器识别的是托管商服务器的证书,而非你的通配符证书)。
如果server2是动态IP(IP经常变动),必须:
- 启用动态DNS服务(如域名托管商自带的动态DNS功能,或第三方DynDNS服务)
- 在server2上部署动态DNS客户端,实时检测IP变更并自动更新子域名的DNS记录,确保解析始终指向当前有效IP
2. 配置Apache虚拟主机与反向代理
利用server2的*.domain2.com通配符证书,为两个子域名创建虚拟主机,反向代理到本地应用端口:
配置app1.domain2.com(绑定443端口)
创建配置文件/etc/apache2/sites-available/app1.domain2.com.conf:
<VirtualHost *:443> ServerName app1.domain2.com # 启用SSL并加载通配符证书 SSLEngine on SSLCertificateFile /path/to/your/wildcard.crt SSLCertificateKeyFile /path/to/your/wildcard.key SSLCertificateChainFile /path/to/your/chain.crt # 如有证书链需添加 # 反向代理到本地app1的443端口(若app1为HTTP服务,改为http://localhost:443) ProxyPreserveHost On ProxyPass / http://localhost:443/ ProxyPassReverse / http://localhost:443/ </VirtualHost>
配置app2.domain2.com(映射444端口)
创建配置文件/etc/apache2/sites-available/app2.domain2.com.conf:
<VirtualHost *:443> ServerName app2.domain2.com SSLEngine on SSLCertificateFile /path/to/your/wildcard.crt SSLCertificateKeyFile /path/to/your/wildcard.key SSLCertificateChainFile /path/to/your/chain.crt # 反向代理到本地app2的444端口 ProxyPreserveHost On ProxyPass / http://localhost:444/ ProxyPassReverse / http://localhost:444/ </VirtualHost>
启用Apache必要模块并重启
执行命令启用反向代理与SSL模块:
a2enmod ssl proxy proxy_http systemctl restart apache2
3. 验证与排查
- 检查DNS解析:使用
dig app1.domain2.com或nslookup app1.domain2.com确认子域名解析到server2的当前IP - 测试SSL握手:执行
openssl s_client -connect app1.domain2.com:443,查看证书是否匹配、有无握手错误 - 应用访问测试:在浏览器中访问
https://app1.domain2.com和https://app2.domain2.com,确认SSL标识正常、应用可访问
常见问题排查:
- 证书不匹配:检查子域名的DNS记录是否直接指向server2,Apache虚拟主机的
ServerName与子域名完全一致 - 应用无法访问:检查server2防火墙是否开放443端口,本地应用是否允许Apache访问,反向代理的端口配置是否正确
内容的提问来源于stack exchange,提问作者chrisatbcae
相关产品推荐
相关产品推荐

