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

Nginx разрешает PHP-файл только для некоторых IP-адресов

Я использую следующую инструкцию, чтобы заблокировать выполнение нескольких типов файлов

location ~* (\.php$|\.htaccess$|\.git) {
    deny all;
}

Как я могу разрешить выполнение только одного сценария PHP для определенного IP-адреса?

Я пробовал следующее, чтобы разрешить выполнение одного скрипта PHP, но не работает ..

location ~ ^adminer.php {                                        
    fastcgi_pass   php-fpm:9000;  
    fastcgi_index  adminer.php;              
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;          
    fastcgi_param  PHP_VALUE        "error_log=/var/log/nginx/application_php_errors.log";
    include  fastcgi_params;                       
}

Чтобы заблокировать пользователя по IP, используйте инструкции «разрешить - запретить», как описано на ngx_http_access_module Затем вы можете добавить правило сбора всех, если оно вам нужно.

location ~* phpinfo.php {                                        
    fastcgi_pass   127.0.0.1:9000;  
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;          
    include  fastcgi_params;                       
    allow your.exact.i.p/32;
    deny all;
}

location ~* \.(?:php|htaccess|git)$ {
    deny all;
}

Использовать location = /path/to/adminer.php как блок вашего местоположения. В = совпадение имеет наивысший приоритет в nginx, а другие location после этого блоки не совпадают.

В вашей конфигурации, скорее всего, это порядок вашего location блоки и перекрывающиеся спички, которые мешают его работе.