4

私はApache 2.4を使用しており、プロキシパス用にconfファイル内で環境変数を使用しようとしています。これについて話しているスレッド [ Apache proxypass using a variable URL with interpolate ] があります。

RewriteEngine on
RewriteMap lowercase int:tolower

#This sets the variable to env:
RewriteRule ^ - [E=SERVER_NAME:${lowercase:%{SERVER_NAME}}]

#Now interpolate makes variables available for proxypass & proxypassreverse:
ProxyPassInterpolateEnv On
ProxyPass / ajp://${SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate

しかし、これを自分で試してみると、「AH00111: 構成変数 ${SERVER_NAME} が定義されていません」というエラーが表示されます。つまり、Apache2.4 は ${SERVER_NAME} を環境変数ではなく設定変数として扱います。

また、このように、変数に mod_rewrite 構文を使用してみました。

ProxyPass / ajp://%{ENV:SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://%{ENV:SERVER_NAME}:8009/ interpolate

しかし、%{ENV:SERVER_NAME} はプレーンテキスト文字列として扱われ、有効な URL パスではないためエラーが発生しました。

構成変数は、サーバーの起動時に「定義」ブロックで定義されます。私が望むのは、mod_rewrite を使用して実行時に SERVER_NAME を変更することです。ProxyPassReverse ブロックも変数で動作させる必要があるため、mod_rewrite [P] 引数は使用できません。mod_rewrite は応答の書き換えを処理できないため、ProxyPassReverse の機能を模倣することはできません。

proxypass conf ディレクティブの補間で環境変数を使用する方法についてのアイデアはありますか?

4

1 に答える 1

2

次の構文を使用すると、警告があっても、Apache は引き続きロードされ、正常に動作することがわかります。

ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate

この問題は、このメーリング リスト スレッドで確認されました。議論は別の問題に関するものですが、彼らはこの問題に言及し、ProxyPass などに 2 つ目の補間構文を追加するというアイデアについて議論しています。ただし、バグ レポートは見つかりませんでした。Apache 2.4.10 のmod_proxy コード${varname}のようです全体的な httpd.conf 補間と競合する構文のみを引き続きサポートします。

私はこれらの特定の警告を無効にする方法を見つけていませんが、警告を受け入れるつもりなら、Apache は引き続き機能するはずです。

1 つの注意点は、Apache のロード時に同じ名前のシステム環境変数が存在する場合、実行時に補間しようとしている値を上書きすることです。

于 2014-08-21T14:08:28.550 に答える