我的公司使用托管在云中的 CMS 系统。我们希望创建内部 DNS 别名,以便开发人员更容易记住。阅读文档后,mod_proxy_connect
我认为应该可以做类似的事情
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName test-cms.mycorp.no
AllowCONNECT
ProxyPass / https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/mycorp
ProxyPassReverse / https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/mycorp
</VirtualHost>
到目前为止我还没能让它工作,值得一提的是
- 除了公共 vert 之外,我无法访问 CMS 系统的证书/密钥。
使用 Apache 可以做到这一点吗?
答案1
我的公司使用托管在云中的 CMS 系统。我们想在内部创建 DNS 别名,以便开发人员更容易记住。
如果您的开发人员无法点击您提供给他们的链接,并且在难以记住的情况下无法创建书签,我会担心这一点……
我还认为您可能想得太技术性和 DIY 了;我会先联系 CMS 提供商,并说明您想使用自己的域名来访问 CMS。他们可能可以(重新)配置他们的服务,以便它与您的首选域名和相关 TLS 证书兼容。
然后,您需要维护的唯一配置是 DNS CNAME 记录,将 test-cms.example.com 指向 mycorp-xpqa-lb-8qh7ip0n.cms.cloud。
现在回到您的 Apache 配置。
mod_proxy_connect只需要向前HTTPS 代理,您正在设置反向代理,不需要AllowCONNECT
。
您的反向代理还需要自己的 TLS 证书,但您的代码中缺少该证书。
通常,在反向代理中将不同的 URL 路径映射 /
到/mycorp
会导致不兼容,不平衡的尾随斜杠也会导致不兼容。
考虑一下这个:
RedirectMatch ^/$ /mycorp
ProxyPass / https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/
ProxyPassReverse / https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/
这会将对根目录、裸子域的请求重定向到正确的子目录,并确保例如来自共享目录(而非公司特定目录)的内容https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/common
仍然可用。
<VirtualHost *:443>
ServerName test-cms.example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/test-cms.example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/test-cms.example.com.key
RedirectMatch ^/$ /mycorp
SSLProxyEngine on
ProxyPass / https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/
ProxyPassReverse / https://mycorp-xpqa-lb-8qh7ip0n.cms.cloud/
</VirtualHost>
CMS 端的任何足够先进的安全配置仍然可以检测到使用了未知域名并随后拒绝访问。
答案2
HBruijn 的回答确实为我解释了一些棘手的部分,但我仍然无法解决它。不过,我设法通过添加以下内容解决了 SSL 问题
SSLProxyEngine on
SSLProxyVerify none
什么似乎不起作用,也参考。HBruijn 发布的答案和以下行
RedirectMatch ^/$ /mycorp
它不起作用。/ 返回 http 404,这就是我得到的,但如果添加了 /mycorp,我预计会得到 http 401。
但是,我将针对这个问题创建一个新问题。