У меня Apache / PHP настроен примерно так: https://wiki.apache.org/httpd/PHP-FPM
Он включает ProxyPassMatch
как уже упоминалось:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/path/to/files/$1
Это отправляет все запросы с .php
в нем прокси, и в конечном итоге отлично обслуживает PHP.
Тем не менее, я пытался сделать некоторый контроль доступа, и, похоже, проксирование имеет приоритет. Моя структура папок такая:
/ <-- PHP files
/extra/ <-- PHP files
/css/
/img/
В корневом каталоге должен быть доступ к файлам PHP, но я хочу ограничить доступ к extra
реж. Я добавил эти строки в свою основную конфигурацию:
<Directory "/extra">
Order deny,allow
Deny from all
</Directory>
Но файлы PHP по-прежнему выполняются ... Когда я помещаю в папку файл другого типа, он успешно блокируется, поэтому директива работает. Я предполагаю ProxyPassMatch
правило запрещает ему работать с файлами PHP.
Я пробовал пару вещей, например, поставить ProxyPassMatch
Править внутри <Directory>
блок (не работает, потому что вы не можете использовать ProxyPassMatch
внутри таких блоков) и подставив ProxyPassMatch
для RewriteRule
с [P]
флаг (аналогично этому: Apache 2.4 + PHP-FPM + ProxyPassMatch, но прокси не прошел).
Мой вопрос почти такой же, как этот: http://www.gossamer-threads.com/lists/apache/users/417758. Однако однозначного ответа не последовало.
Что меня смущает, так это то, что вам нужно установить правило прокси, но когда вы его вставляете, все остальное не имеет значения (.htaccess также больше не работает). Кроме того, это вызывает вопросы о безопасности. Все с .php
в нем остаются нетронутыми моими причудливыми положениями доступа, и он проходит напрямую к внутренним компонентам системы. Как я могу объединить PHP-FPM с соответствующими правилами безопасности в Apache?
С участием ProxyPassMatch
.htaccess
файлы будут полностью проигнорированы. Что-то похожее, вероятно, происходит с игнорируемыми директивами в основном файле конфигурации.
Попробуйте использовать FilesMatch
и SetHandler
вместо этого, как описано в 2015 ответ на вопрос, с которым вы уже связались, и это сообщение в блоге.
Это старый вопрос, но он появляется на первой странице, когда я ищу решение для управления доступом для Apache при использовании ProxyPass
и ProxyPassMatch
. Так что это может помочь кому-то еще, кто начал здесь, а не документации Apache.
Решение - включить раздел под объявлениями прокси:
<Proxy "*">
Require ip 192.168
Require host example.com
</Proxy>
Это все по документация по mod_proxy.
Поместите это перед своим ProxyPassMatch
ProxyPass /extra !
Если ProxyPass находит / extra - текущая папка, ProxyPassMatch использоваться не будет. Важно! в конце строки.
Смотрите здесь для получения дополнительной информации: ProxyPass