web-dev-qa-db-ja.com

mod-proxy-fcgiおよびphp7.0-fpmで基本認証が失敗する

AWSインスタンスで実行されているUbuntu16.04LTS。 Apache 2.4.18/PHP7.0-fpm

問題は基本認証にあります。/var/www/html/admin//をpw-protectしようとしています。 php以外のファイルはすべて保護されていることがわかりましたが、.phpファイルは、basic-authを適用したり、ユーザー名/パスワードを要求したりせずに、プロキシに直接移動するようです。

.confと.htaccessにauthディレクティブを挿入してみました。 DirectoryタグとLocationタグを試してみましたが、うまくいきませんでした。私はproxy-fcgiが認証ヘッダーを渡さなかったこととこれらを強制するための提案を読んだ

SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

しかし、それは役に立ちませんでした(そして、私の問題は実際には信用を渡すことではありません-そもそも彼らに尋ねさせることにあります。

プロキシディレクティブは次のとおりです。

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/html/

私はいくつかの方法で基本認証を表現しようとしました...しかしここに1つあります:

    <Directory ~ "/var/www/[^/]+/[^/]+/admin/">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/Apache2/.htpasswd
        Require valid-user
    </Directory>

私が運が悪かった他のこと:

  • authヘッダーを書き換えて、.htpasswds に対する適切なアクセス許可を確保します。
    • authbasicから 'deny fromall'に変更します。それでも.phpファイルを許可します
1
williamk

もう少し深く調べてみたところ、解決策が見つかりました。このパネルのYashによる回答に感謝します。彼によると、問題は、proxypassディレクティブがauthディレクティブよりも優先され、資格情報が必要になる前に.phpをプロキシに送信することです。修正は、filesMatchディレクティブでsetHandlerを実行することです。これは期待どおりに機能しました。 (directorymatchディレクティブを-に微調整したことに注意してください。ただし、これは主要な質問とは無関係です)。

<DirectoryMatch "/var/www/html/(admin|.+test)">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/Apache2/.htpasswd
        Require valid-user
</DirectoryMatch>

<Proxy "fcgi://localhost:9000/" enablereuse=on max=10>
</Proxy>

<FilesMatch \.php$>
    SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
1
williamk