LoginSignup
1
3

More than 5 years have passed since last update.

PHP-FPM+Apacheの環境で、PHP側でDigest認証をかける

Posted at

ディレクトリ単位でなく、もっと細かく制御してDigest認証をかける必要が出てきたので、PHP側で制御しようと思ったのですが、ちょっと引っかかってしまいました。

CodeIgniter用ライブラリ

システムのベースがCodeIgniterだったので、適したライブラリ(あずみさん作)を入れて、Digest認証を行うこととしました。

…ところが、正しいパスワードを何度入れても認証画面が消えず、認証を通すことができませんでした。

立ちはだかる壁

Apacheと一体化するmod_phpと違って、PHP-FPMは別プロセスで動いているので、相互のデータのやり取りでうまくいかないことがあります(環境変数の設定に悪戦苦闘した例)。今回もそれと同様に、ApacheがAuthorization:ヘッダをクリアしていました。

設定変更…しようとしたけれど

調べてみると、CGIPassAuthというディレクティブがあって、これを付ければヘッダを通してくれるし、しかも.htaccessで設定できることがわかりました。で、実際に設定したところ、無情にも「Internal Server Error」の画面を拝むこととなってしまいました。

Apacheのドキュメントを確認してみると、CGIPassAuthが使えるのはApache 2.4.13以降ですが、手元のApacheは2.4.6ということで、リビジョン差で動かない、という結論でした。

別なルートで設定する

どうしたものかと調べていくと、StackOverflowの投稿にたどり着きました。CGIPassAuthが使えない場合に、SetEnvIfでセットする、という技が紹介されていました。

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

もちろん、これでは通常のPHP_AUTH_XXX系で取れなくなるので、$_SERVER['REDIRECT_HTTP_AUTHORIZATION']と、PHP側でアクセスする変数も別なのにする必要がありました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3