我一直在 Google 上搜索,但到目前为止还没有找到可以解决我的情况的页面,这很奇怪,因为我确信之前已经有人尝试过数千次,甚至数百万次。
我希望在我家托管开发网站,供客户测试,然后再将它们部署到他们想要用于生产的任何类型的托管解决方案中。以下是我使用的:
- 动态 DNS 服务($$ 每年 vs $$ 每月固定 IP) - 我们称之为 foobar.dnsalias.net
- 我的域名注册商免费提供所谓的“带掩码转发”,将特定子域名转发到动态 DNS 域名的唯一端口 - 例如 dev1.mydomain.com 转到 foobar.dnsalias.net:8081,dev2.mydomain.com 转到 foobar.dnsalias.net:8082,等等...
- 路由器上的端口转发将每个唯一端口转发到我的私有 LAN 上自己的 IP - 例如 8081 到 192.168.1.81,8082 到 192.168.1.82,等等...
- 如果 IP 使用 ifcfg-eth0-range0,则虚拟接口具有一个范围
- httpd.conf 中针对基于 IP 的虚拟主机的多个 Listen 指令
所有这些都运行良好,但现在我想对我的所有子域名使用 https,因此我购买了一个通配符证书(信不信由你,该证书加上动态 DNS 的效果比我的 ISP 对一个固定 IP 收取的月费便宜 36% 到 41%),并且我已经使用 VirtualHost 标签中的相应 SSLCertificate* 指令成功安装了它。
问题在于浏览器抱怨不受信任的连接,因为尽管有所谓的“屏蔽”,它仍然意识到它正在通过动态 DNS 域重定向。
foobar.dnsalias.net:8081 uses an invalid security certificate.
The certificate is only valid for the following names:
*.mydomain.com , mydomain.com
(Error code: ssl_error_bad_cert_domain)
我以为我可以使用一些 mod_rewrite 指令,但是要么是我还没有找到 RewriteCond 和 RewriteRule 模式和标志的正确组合,要么是我误解了“带屏蔽转发”的含义。
RewriteEngine on
RewriteCond %{HTTP_HOST} foobar.dnsalias.net [NC]
RewriteRule ^(.*) https://dev1.mydomain.com:8081/$1 [P]
有人能解释一下如何让它工作吗?
答案1
简而言之,这是行不通的。
您的动态 DNS 提供商正在响应从 dev1.mydomain.com 到 foobar.dnsalias.net:8081 地址的 HTTP 重定向;这是您基于 HTTP 主机标头进行重定向并同时更改端口号的唯一方法。
我能想到的唯一方法是将 whatever.mydomain.com CNAME 为 foobar.dnsalias.net,并从适当的开发服务器设置到服务器流量的反向代理。
这样,当您的客户(Acme Incorporated)启动时https://acme.mydomain.com,DNS 将直接解析到您的动态 IP(通过 CNAME),并且您的反向代理将看到主机头为“acme.mydomain.com”。然后它可以转到 dev2.mydomain.com 获取相关内容。