location /_private {
deny all;
}
location ~ \.php$ {
# Workaround PHP vulnerability:
# http://forum.nginx.org/read.php?2,88845,page=3
try_files $uri =404;
include /etc/nginx/fastcgi_params;
keepalive_timeout 0;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/tmp/php.socket;
}
Я хотел бы запретить доступ ко всему, что находится в _private
каталог. Когда я пытаюсь получить доступ _private/a
, Я получаю ошибку 403, как и положено. Но когда я пытаюсь получить доступ _private/b.php
, то deny all
часть полностью игнорируется.
Сделайте свой /_private
местоположение имеет приоритет над совпадением регулярного выражения:
location ^~ /_private {
Вот и все.
В документация nginx имеет хорошую информацию о том, какой блок местоположения будет применяться к данному запросу. Цитировать:
- Директивы с префиксом "=", которые точно соответствуют запросу. Если найден, поиск прекращается.
- Все остальные директивы с обычными строками. Если в этом совпадении используется префикс «^ ~», поиск прекращается.
- Регулярные выражения в том порядке, в котором они определены в файле конфигурации.
- Если № 3 дал совпадение, используется этот результат. В противном случае используется совпадение из №2.