web-dev-qa-db-ja.com

クエリ文字列の代替を使用したMod-proxy?

現在、mod_proxyを使用して別のサーバーで検索リクエストを作成しようとしています。リモートサーバー要求は、次のように構成する必要があります。

http://path.to.remote/search.php?key=MYKEY&term=SEARCHTERM

アクセスキーを難読化するために、vhost定義内に認証を含めることを望んでいました。キーはクエリ文字列値として渡される必要があるため、次のように簡単だと思いました。

ProxyPass /lookup/t/ http://path.to.remote/search.php?key=MYKEY&term=

私のURLはどのようになりますか

http://localhost/lookup/t/term=SEARCHTERM

ProxyPassがターゲットURLで必須の文字エスケープを実行しているため、URLが使用できなくなっていることにすぐに気付きました。主に以前にエンコードされた文字で同様の問題を抱えている人がたくさんいて、ProxyPassを使用したURLエンコードは避けられませんでした。

Mod_rewriteを使用してプロキシ要求をアセンブルする必要があるという提案をいくつか見つけましたが、その方法がわかりませんでした。私はvhost定義に次のようなルールを作成しました。

RewriteEngine On
RewriteCond     %{REQUEST_URI}      !^/lookup/t/
RewriteRule ^/lookup/t/$ http://path.to.remote/search.php?key=MYKEY&term=$1

私はmod_rewriteの経験があまりなく、正規表現のスキルも優れていないので、URLを書き換える方法と、必要に応じてmod_proxyを介してURLをファネルする方法を誰かに説明してもらいたいと思います。次のようにクエリ文字列をアセンブルするためにrewriteを使用する必要があると考えるのは正しいですか?

Http://localhost/lookup/t/term=SEARCHTERM  
Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM  

次に、modプロキシを使用して

/lookup/t/   

http://path.to.remote/search.php
2
user1026361

私の疑惑は正しいことがわかった。 mod_rewriteを使用してクエリ文字列を変更してから、宛先にプロキシする必要がありました。最終的には:

  1. Mod_rewriteとmod_sslを有効にしました
  2. SSLProxyEngineディレクティブをvhost定義に追加しました。
    SSLProxyEngineオン
  3. リライトをオンにして、vhostdefにルールを追加しました。また、デバッグのためにロギングをオンにしました。ディレクトリのリクエストを書き換えることができないことを知ったので、スクリプトを指定する必要がありました。また、QSAおよびPオプションを使用する必要がありました。
    RewriteEngineオン
    RewriteRule ^ /lookup.php/lookup?key = MYKEY [QSA、P]

  4. プロキシルールを設定しました。クエリ文字列が作成されるため、単純なプロキシルールが適用されます。
    ProxyPass/lookup https://path.to.remote/search.php
    ProxyPassReverse/lookup https://path.to.remote/search.php

  5. Apacheを再起動することを忘れないでください! (やった)

  6. http://localhost/lookup.php?term=SEACRHTERMに接続します
2
user1026361