47

概要: Apache 2.4 の mod_proxy は Authorization ヘッダーを PHP-FPM に渡していないようです。これを修正する方法はありますか?

長いバージョン: Apache 2.4 と PHP-FPM でサーバーを実行しています。オペコード キャッシングとユーザー キャッシングの両方に APC を使用しています。インターネットで推奨されているように、Apache 2.4 の mod_proxy_fcgi を使用して、次のようにリクエストを FPM にプロキシしています。

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/foo/bar/$1

セットアップは正常に動作しますが、1 つの点を除いては、APC のステータスを監視するために使用される APC のバンドルされた apc.php では、ログインできません (ユーザー キャッシュ エントリを確認するために必要です)。[ユーザー キャッシュ エントリ] をクリックしてユーザー キャッシュを表示すると、ログインするように求められます。ログイン ボタンをクリックすると、通常の HTTP ログイン フォームが表示されますが、正しいログインとパスワードを入力しても成功しません。この関数は、mod_proxy + php-fpm の代わりに mod_php で実行すると完全に機能します。

グーグルで調べたところ、他の人も同じ問題を抱えていることがわかり、Apache が Authorization HTTP ヘッダーを外部の FastCgi プロセスに渡していなかったことが原因であることがわかりました。残念ながら、次のような mod_fastcgi の修正しか見つかりませんでした。

FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization

mod_proxy_fcgiでも機能する同等の設定または回避策はありますか?

4

3 に答える 3

101

さまざまな Apache モジュールがAuthorizationヘッダーを削除しますが、これは通常「セキュリティ上の理由」からです。それらはすべて、この動作を無効にするために微調整できるさまざまなあいまいな設定を持っていますが、どのモジュールが原因であるかを正確に判断する必要があります.

env を介してヘッダーを直接 PHP に渡すことで、この問題を回避できます。

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

Zend Server Windows - 認証ヘッダーが PHP スクリプトに渡されないも参照してください。

一部のシナリオでは、これでも直接は機能せず、PHP コードを$_SERVER['REDIRECT_HTTP_AUTHORIZATION']ではなくaccess に変更する必要があります$_SERVER['HTTP_AUTHORIZATION']。Apache RewriteRuleディレクティブで環境変数を設定する場合、変数名の先頭に「REDIRECT_」が付く原因は何ですか? を参照してください。

于 2013-07-05T14:06:07.177 に答える
54

これは、mod_proxy または mod_proxy_fcgi で文書化されていないため、クラックするのに長い時間がかかりました。

次のディレクティブを apache conf または .htaccess に追加します。

CGIPassAuth on

詳しくはこちらをご覧ください。

于 2015-10-21T08:47:01.833 に答える