Sil*_*rog 2 proxypass apache-2.2
我已经为此寻找了一个解决方案,希望这只是我。我想要做的是将所有流量从我们托管的 URL 重定向到由我们购买的另一个提供商管理的另一台服务器,以便我们可以自定义根 URL。
我正在使用 httpd 2.2.3 (Apache)。这是在 VirtualHost 部分中配置的,它也是 SSL(不过我认为这无关紧要)。
除了排除之外,一切都很好。
我所拥有的(简化)是:
ProxyPreserveHost On
<VirtualHost 1.2.3.4:443> SSLProxyEngine On
ProxyPassMatch ^/$ !
ProxyPassMatch ^/(.*)$ https://proxy.example.com/$1
ProxyPassReverse / https://proxy.example.com/
SSLEngine on
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但是,它总是转到远程站点。我尝试了一堆组合,例如:
ProxyPassMatch /$ ! ProxyPassMatch ^/(.*)$ https://proxy.example.com/$1
ProxyPassMatch com/! ProxyPassMatch ^/(.*)$ https://proxy.example.com/$1
我也尝试过另一种方式(将任何内容与 / 之后的内容相匹配,即:
ProxyPassMatch ^/(..+)$ https://proxy.example.com/$1 ProxyPassMatch / !
ProxyPassMatch ^/(..*)$ https://proxy.example.com/$1 ProxyPassMatch / !
现在文档说它与 URL 匹配,但我没有发现任何证据表明这就是它的实际作用(即:上面带有com/ 的第二个变体)。
我还尝试了许多其他组合,它们要么匹配所有内容,要么不匹配任何内容。
我的想法是我不理解提供给正则表达式的 URL,但不知道如何看待它。我已经将 Apache 中的调试级别调高到debug,它也没有提供任何有用的东西。
干杯。
小智 5
如果我不得不猜测,我会说您的问题来自“^/.*$”匹配,它将匹配“/”。如果您放弃与 / 的显式匹配并将代理传递替换为“^/.+$”,则可能会解决您的问题。虽然没有承诺。
区别在于 * 等效于 .{0,} 而 + 等效于 .{1,},因此 .* 将匹配任何字符或不匹配任何字符,而您希望匹配至少一个字符。
即:该行应为:
ProxyPassMatch ^/(.+)$ proxy.example.com/$1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29608 次 |
最近记录: |