O caminho mais fácil seria começar negando todo o acesso e, em seguida, concedendo apenas acesso aos diretórios desejados. Como ring0 apontou, você pode usar o sinalizador default (default_server in 0.8) na diretiva listen. No entanto, se você já tiver um servidor que deseja usar como padrão para acesso com nome desconhecido ao seu host, também poderá capturar apenas solicitações sem um cabeçalho de host ou com o endereço IP do servidor com algo assim (substituindo 1.2.3.4 ip do servidor:
upstream _php {
server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
server_name "" 1.2.3.4;
root /path/to/root;
index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# deny everything that doesn't match another location
location / { deny all; }
# allow loading /index.php
location = / { } # need to allow GET / to internally redirect to /index.php
location = /index.php { fastcgi_pass _php; }
# allow access to phpmyadmin
location /phpmyadmin/ { } # Allow access to static files in /phpmyadmin/
location ~ ^/phpmyadmin/.*\.php$ { fastcgi_pass _php; } # phpmyadmin php files
}
os fastcgi_params serão herdados pelos dois locais que fastcgi_pass, e somente /index.php e / phpmyadmin / são permitidos. Eu também adicionei um bloco upstream para php, o que torna mais fácil se você precisar adicioná-lo ou alterá-lo no futuro.