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 ответ:
После нескольких часов исследований я понял, что причина, по которой это происходит, заключается в том, что директива ProxyPassMatch является первой директивой, подлежащей обработке, и это заставляет apache игнорировать другие директивы для .расширение PHP.
Чтобы иметь возможность использовать другие директивы apache с php-fpm через proxy_fcgi_module, следует использовать директиву filesmatch вместо proxypassmatch.
Синтаксис выглядит следующим образом:
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>