Как заблокировать все расширения файлов определенных типов на nginx

Я запускаю несколько сайтов за интерфейсом nginx. Все мои сайты находятся в Python/Django. Я вижу в моих журналах много обхода хакерами для различных приложений php - я хотел бы заблокировать их (вернуть 404) в nginx, не поражая мои серверы приложений.

Я хотел бы сделать это глобально в моем файле конфига nginx, чтобы он применим ко всем настройкам для моего сайта.

Итак, как я:

  • Возврат 404 для всех расширений типа .php
  • Возврат 404 для частичных совпадений определенных строк, таких как "phpmyadmin"

Ответ 1

Try:

location ~ (\.php$|myadmin) {
    return 403;
}

Ответ 2

location должен отображаться только внутри server, он не допускается внутри http.

Итак, единственный вариант - создать файл с вашими общими местоположениями и include в свои server s.

Ответ 3

Дополняя Dayo-ответ, мы также должны добавить трейлинг-доллар, иначе любой файл, такой как jquery.mousescroller.js, также будет заблокирован.

location ~ (\.php$|myadmin) {
    return 403;
}

Ответ 4

Вы также можете попробовать, if и регулярное выражение. Например, для хранения статических файлов с правилами исключения я сделал это, как показано ниже, чтобы обслуживать файлы отладки js из другого дерева папок. :

location /some/virtual/path/ {
    if( $request_uri !~ '\.js$' ) { return 404 ; }
    alias /some/real/path/
}