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

rhe*_*lem 6 ssl tunneling apache-2.4

我的公司使用托管在云中的 CMS 系统。我们希望创建内部 DNS 别名,以便开发人员更容易记住。阅读文档mod_proxy_connect我确实认为应该可以做类似的事情

<VirtualHost *:443>
 ServerAdmin mellomvaredrift@mycorp.no
 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>
Run Code Online (Sandbox Code Playgroud)

到目前为止我还没能让它发挥作用,值得一提的是

  • 除了公共版本之外,我无权访问 CMS 系统的证书/密钥。

使用 Apache 可以做到这一点吗?

HBr*_*ijn 6

我的公司使用托管在云中的 CMS 系统。我们希望创建内部 DNS 别名,以便开发人员更容易记住。

如果您的开发人员无法点击您提供给他们的链接,并且在太难记住时无法创建书签,我会担心......

我还认为你可能想得太技术化和DIY了;我首先联系 CMS 提供商并声明您想要使用自己的域来访问 CMS。他们可能可以(重新)配置他们的服务,以便它可以与您的首选域和关联的 TLS 证书配合使用。

然后,您需要维护的唯一配置是指向 test-cms.example.com 的 DNS CNAME 记录。到 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/
Run Code Online (Sandbox Code Playgroud)

这将对根、裸子域的请求重定向到正确的子目录,并且还确保来自共享目录(而不是公司特定目录)的内容(例如)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>
Run Code Online (Sandbox Code Playgroud)

CMS 一侧任何足够高级的安全配置仍可能检测到使用了未知域名并随后拒绝访问。


rhe*_*lem 4

HBruijn 的回答确实为我解释了一些棘手的部分,但我仍然无法解决它。但我只需添加以下内容就可以解决 SSL 问题

SSLProxyEngine on
SSLProxyVerify none
Run Code Online (Sandbox Code Playgroud)

什么似乎不起作用,也参考。HBruijn 发布的答案和该行

 RedirectMatch ^/$ /mycorp
Run Code Online (Sandbox Code Playgroud)

这是行不通的。/ 返回 http 404,这就是我得到的,但如果添加了 /mycorp,我会期望 http 401。

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