Назад | Перейти на главную страницу

Запретить все отменяется другим блоком местоположения

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 имеет хорошую информацию о том, какой блок местоположения будет применяться к данному запросу. Цитировать:

  1. Директивы с префиксом "=", которые точно соответствуют запросу. Если найден, поиск прекращается.
  2. Все остальные директивы с обычными строками. Если в этом совпадении используется префикс «^ ~», поиск прекращается.
  3. Регулярные выражения в том порядке, в котором они определены в файле конфигурации.
  4. Если № 3 дал совпадение, используется этот результат. В противном случае используется совпадение из №2.