A configuração abaixo deve fazer com que o nginx responda aos URLs de "abuso" com um status 404 e uma página básica nginx, 404; todos os outros URLs terminados em .php
devem ser passados para o mecanismo do aplicativo / php como de costume.
Eu testei alguns dos padrões, mas você deve testar todos os padrões que você quer que sejam gerenciados pelo nginx e não pelo aplicativo.
Eu pensei que esta configuração pode ter tido alguns problemas em URLs como /phpmyadmin/index.php
onde o \.php
regex do local de passagem do proxy tinha maior prioridade, mas o meu teste mostra que funciona, pelo menos para mim.
Além disso, sim, seria melhor se não houvesse tantos blocos de localização, mas não consigo pensar em como você conseguiria isso.
server {
listen 80;
root /home/public_html;
index index.php;
server_name domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
# The ^~ means if this prefix pattern matches use this location block
# and don't continue onto the regex location blocks - which would load
# the laravel application
location ^~ /wordpress/wp-admin/ {
return 404;
}
location ^~ /wp-admin/ {
return 404;
}
location ^~ /test/wp-admin/ {
return 404;
}
location ^~ /hudson/login {
return 404;
}
location ^~ /phpmyadmin/index.php {
return 404;
}
location ^~ /mysql/index.php {
return 404;
}
location ^~ /myadmin/index.php {
return 404;
}
location ^~ /wp-cron.php {
return 404;
}
location ^~ /xmlrpc.php {
return 404;
}
}