Apache 2.4 и php-fpm не запускают apache http basic auth для страниц php


Я уверен, что этот вопрос был задан где-то, если вы меня извините, но поиск в Интернете не дал мне ничего осязаемого.

Вот мой сценарий:

Я защищаю веб-каталог с помощью Apache http basic auth. Так что у меня есть свои .htaccess в корневой папке и мой httpd.conf настроен на переопределение всех так, что он принимает.htaccess в рассмотрение. Содержание мое .htaccess выглядит следующим образом:

AuthType Basic

AuthName "испытание"

AuthUserFile / etc / httpd/.test_pass

Require valid-user

.test_pass был успешно настроен с помощью htpasswd. При доступе к корневой папке web через браузер или любой html-файл я получаю всплывающее окно аутентификации правильно. Использование пароля дает мне ожидаемый доступ.

Но когда я обращаюсь к странице php, всплывающее окно аутентификации не появляется,и страница php отображается.

Вот моя настройка:

  • Версия Apache: 2.4.6
  • php-fpm: PHP 5.4.16 (fpm-fcgi) с Zend Engine v2. 4. 0
  • использование proxypass из proxy_fcgi_module (shared) для связи между apache 2.4 и php-fpm
  • Кроме того, я не использую сокетные соединения, потому что apache 2.4.6 этого не делает. поддержите его
  • моя настройка proxypass выглядит следующим образом и работает довольно хорошо: ProxyPassMatch ^/(..РНР(/.)?) $ fcgi:/ / 127.0.0.1:9000/var / www / html / $1

Мне нужно иметь возможность установить имя пользователя/пароль. аутентификация через apache basic auth, который защищает все файлы, включая файлы php в каталоге.

Я использую программное обеспечение с открытым исходным кодом; поэтому изменение программных кодов - это самое последнее средство.

Есть ли обходное решение / решение для php-fpm и mod_proxy_fcgi?

Спасибо

1 2

1 ответ:

После нескольких часов исследований я понял, что причина, по которой это происходит, заключается в том, что директива ProxyPassMatch является первой директивой, подлежащей обработке, и это заставляет apache игнорировать другие директивы для .расширение PHP.

Чтобы иметь возможность использовать другие директивы apache с php-fpm через proxy_fcgi_module, следует использовать директиву filesmatch вместо proxypassmatch.

Синтаксис выглядит следующим образом:

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>