如何使用 Apache 作为 https 的反向代理?

如何使用 Apache 作为 https 的反向代理?

我的公司使用托管在云中的 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。

但是,我将针对这个问题创建一个新问题。

相关内容