Nginx — блокировать все * .php файлы, кроме индекса

#php #nginx

#php #nginx

Вопрос:

Я новичок в nginx. Мне нужно заблокировать все .php файлы по соображениям безопасности. Любой простой способ сделать это похожим на .htaccess от Apache, как показано ниже:

 RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} .php$
RewriteRule !^index.php index.php [L,NC]
  

Заранее спасибо!

Ответ №1:

Вместо обычного расположения обработчика nginx PHP

 location ~ .php$ {
    ... # FastCGI PHP handler here
}
  

используйте что-то вроде

 location ~ .php$ {
    rewrite ^ /index.php last;
}
location = /index.php {
    ... # FastCGI PHP handler here
}
  

Хотя совпадающие местоположения регулярных выражений ( location ~ <regex> { ... } ) имеют приоритет над местоположениями префиксов ( location <URI prefix> { ... } ) при сопоставлении URI запроса, точное совпадающее местоположение ( location = <URI> { ... } ) имеет приоритет над ними обоими.

Комментарии:

1. Другое дело — <code> расположение ~ .php$ { rewrite ^ /index.php последнее; } местоположение = /index.php { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php ; включить fastcgi_params; } <код> Загружает эти файлы, как я могупредотвратить это?

2. Похоже, вы не установили параметр SCRIPT_FILENAME FastCGI. Добавьте fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; директиву в расположение обработчика PHP FastCGI.