web-dev-qa-db-ja.com

Apache 2.4 + PHP-FPMおよびAuthorizationヘッダー

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

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

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/foo/bar/$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でも機能する同等の設定または回避策はありますか?

34
CodeTwice

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

Env経由でPHPにヘッダーを直接渡すことで、この問題を回避できます。

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

Zend Server Windows-Authorization headerは渡されませんPHP script

79
Rich

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

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

CGIPassAuth on

詳細については、 here を参照してください。

31
limos

Mod_proxy_fcgiで同様の設定は見つかりませんでしたが、デフォルトで機能します。ユーザー認証(通常どおり.htaccess)を要求し、phpがそれを取得し、mod_phpまたはfastcgiおよびpass-headerと同様に機能します。私が助けになったかどうかわかりません...

編集:DirectoryIndexを使用する場合、teszt.com /でのみ機能します... PHPファイル名を渡した場合(index.phpであっても)、機能しません。PHPに認証を渡さないでください。これは私にとってはブロッカーですが、Apache 2.2(およびmod_fastgi)にダウングレードしたくないので、nginx(このマシンでも)に移行します。

0
DBLaci