В прошлой жизни я был несколько опытным администратором Apache, но решил сделать решительный шаг и изучить nginx. Пока все кажется довольно интуитивно понятным, но ясно, что я еще не совсем усвоил способ решения задач nginx, поэтому я вполне уверен, что это легко решить, но я не могу найти очевидного ответа.
У меня есть сервер, который использует сервер php-fpm для PHP, где я хочу ограничить доступ к некоторым подкаталогам в корне моего документа по исходному IP (например: phpmyadmin, некоторые написанные мной тестовые сценарии и т. Д.). По какой-то причине установленное мной ограничение работает нормально для каталогов и файлов, но файлы PHP, обслуживаемые сервером FastCGI, очевидно, обходят это ограничение доступа. Я проверил, что это так, создав тестовые файлы разных типов в ограниченном каталоге. Текстовые и HTML-файлы действительно отклоняются и возвращают 403, но файлы PHP, независимо от их содержимого, по-видимому, анализируются и отправляются обратно клиенту.
Вот что я считаю соответствующими разделами конфигурации моего сайта:
# pass all PHP scripts to FastCGI server socket
location ~ \.php$ {
# Filter out arbitrary code execution
location ~ \..*/.*\.php$ {return 404;}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# allow access to tools pages as necessary
location ~ /tools/ {
allow 10.11.12.13/32;
allow 10.11.12.14/32;
deny all;
}
В конфигурации больше, но нет директив, которые влияют на файлы PHP или / tools / location, насколько я могу судить. Я ищу поведение для всех файлов в / tools /, которые должны быть ограничены независимо от типа файла, если нет явного разрешающего правила для рассматриваемого диапазона IP-адресов.
Любой свет, который вы можете пролить на это, чтобы указать мне в правильном направлении, был бы очень кстати!
Это потому, что nginx обслуживает запрос из одного соответствующего блока местоположения, а не из нескольких. Кроме того, у nginx есть специальный процесс для его выбора, прочтите мой ответ по аналогичному вопросу или прочтите официальная документация для подробностей.
Я предполагаю, что вы также используете index
директива где-то, чтобы указать nginx обслуживать index.php
файл при входе tools
каталог или подкаталог, и эта директива запускает внутреннее перенаправление в блок расположения php, доступ к которому не ограничен.
Вам нужно будет использовать вложенные блоки местоположения или использовать более конкретные регулярные выражения.