Apache httpd:使用通配符子域作为代理目标

问题描述

我想创建一个Apache httpd虚拟主机,通过将该域作为Apache URL的子域(或者,如果愿意,可以将其放入路径/参数中)来允许我代理Internet上的任何域。快速变丑)。例子:

  • “ foo.bar.com.proxy.domain.com/login”代理为“ foo.bar.com/login”(但浏览器仍显示一个URL)
  • “ 160.24.32.11.proxy.domain.com”代理为“ 160.24.32.11/login”(但浏览器仍显示一个URL)

基本上,此操作的结果将是一个代理,该代理允许无需实际访问即可访问各种URL(而Apache显然需要访问)。我了解鱿鱼等,但是我需要这个基于Apache的解决方案。

我了解到每个子域都可以使用ProxyPass指令。但是,我也不希望每个子域都有一个配置文件,因为可能事先不知道所请求的URL。

我在重写方面也取得了一些成功(保留Apache主机;请参见下文),但是在具有基本上每个Web应用程序都包含的重定向的情况下,显然很成问题。

<VirtualHost *:443>
    ServerName proxy.domain.com
    ServerAlias *.proxy.domain.com
    ServerAdmin [email protected]

    SSLEngine On
    SSLProxyEngine On
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    SSLCertificateFile /usr/local/apache2/conf/ssl/cert.crt
    SSLCertificateKeyFile /usr/local/apache2/conf/ssl/cert.key

    ProxyRequests     Off
    ProxyPreserveHost On
    AllowEncodedSlashes NoDecode

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.+)\.proxy\.domain\.com$ [NC]
    RewriteRule ^(.*)$ https://%1$1 [P,L]

    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"

    Header set Access-Control-Allow-Origin null
    Header set Access-Control-Allow-Credentials true

    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
</VirtualHost>

我很确定我需要使用ProxyPassMatch。由于ProxyPassMatch并没有提供完整的URL(包括子域作为代理源),而是仅提供了端口后面的路径,因此我在这里什么都没有。任何帮助表示赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)