web-dev-qa-db-ja.com

ルートパスを除くすべてのURLでProxyPassMatchを使用する

私はこれに対する解決策を求めて高低を検索しました、そしてそれが私だけであることを望んでいます。私がやろうとしていることは、ホストする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>

ただし、alwaysはリモートサイトに移動します。私は次のような組み合わせをたくさん試しました:

 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 /の上の2番目のバリアント) 。

私はまた、すべてに一致するか、何にも一致しない他の組み合わせを試しました。

私の考えでは、正規表現に与えられているURLを理解できていませんが、それをどのように見ればよいかわかりません。私は、Apacheのデバッグレベルをdebugに上げましたが、それも有用なものは何もありません。

乾杯。

2
Sillyfrog

私は答え、または別の回避策を見つけました:別のサーバーを使用する(この場合、ローカルサーバーはまだ同じhttpdインスタンス上にあります)。

つまり、上記の行は次のようになります。

ProxyPassMatch ^/$ 127.0.0.1:81
ProxyPassMatch ^/(.*)$ proxy.example.com/$1 

(さらに、新しいポートで実行するための通常のホスト構成と、そのポートでの仮想ホストの構成)。それは少し厄介ですが、それを整理するように見えます!

私はまだ私が何か間違ったことをしたかどうか、そしてこれに対する「正しい」答えがあるかどうかを知りたいと思っています-これは少しハックだと思うので。

1
Sillyfrog

私が推測しなければならなかった場合、あなたの問題は「/」に一致する「^ /。* $」一致に起因すると言えます。 /への明示的な一致を削除し、プロキシパスを "^ /。+ $"に置き換えた場合may問題が解決します。しかし、約束はありません。

違いは、*が。{0、}と同等であるのに対し、+は。{1、}と同等であるため、。*は任意の文字またはno文字と一致しますが、少なくとも1つの文字との一致が必要です。 。

すなわち:行は次のようになります。

ProxyPassMatch ^/(.+)$ proxy.example.com/$1
5
OstermanA