Ошибка базовой аутентификации с mod-proxy-fcgi и php7.0-fpm

Ubuntu 16.04 LTS работает на экземпляре AWS. Apache 2.4.18 / PHP7.0-fpm

Проблема с базовой аутентификацией. Я пытаюсь pw-protect / var / www / html / admin //. Я считаю, что все не-php файлы защищены, но.php-файлы, похоже, идут прямо на прокси-сервер без применения basic-auth и запроса имени пользователя / пароля.

Я попытался вставить директивы auth в.conf и.htaccess. Я попытался с тегами каталога и местоположения без удачи. Я читал, что proxy-fcgi не передавал заголовки аутентификации и предлагал форсировать их

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

Но это не помогло (и моя проблема не в том, чтобы передать кредиты, а в том, чтобы их сначала спросили.

Вот директива прокси:

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

Я попытался выразить основную аутентификацию несколькими способами... но вот один:

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

Другие вещи, которые я попробовал без удачи:

  • переписать заголовок аутентификации, чтобы обеспечить правильные разрешения для.htpasswds
    • измените с auth basic на 'deny from all'. Это все еще позволяет файлы.php

1 ответ

Я нашел решение после поиска немного глубже. Благодаря ответу Яша на этой панели. По его словам, проблема в том, что директива proxypass имеет приоритет над директивой auth и отправляет.php прокси-серверу до того, как требуются учетные данные. Исправление состоит в том, чтобы установить Handler в директиве filesMatch. Это сработало, как и ожидалось. (заметьте, я подправил директиву 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>