Je dispose d'un bloc serveur spécial {} pour les cas où les personnes utilisent une adresse IP dans un en-tête d'hôte (server_name ~^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+;
) et cela fonctionne bien. J'aimerais avoir un autre bloc serveur pour les cas où aucun en-tête d'hôte n'est fourni. J'ai testé avec :
telnet localhost 80
GET /foobar HTTP/1.0
Et je constate grâce à mes journaux (qui ont "$http_host"
dans le format de log) que cela apparaît comme "-"
(un tiret, pas un tiret bas). Mais ce bloc serveur :
serveur {
listen 80;
listen [::]:80;
# tiret, pas tiré bas
server_name ~^-*$;
root /var/www/no-host;
default_type text/plain;
index foo.ey
location / {
try_files $uri /foo.ey;
}
}
N'est jamais utilisé, la requête va plutôt au bloc par défaut qui a server_name _;
(tiré bas, pas de tiret).
Mon cas d'utilisation est similaire à un site de parking de domaines, je veux gérer beaucoup de noms d'hôtes et tous les noms légitimes doivent être recherchés dans une base de données, mais je veux filtrer certains noms illégitimes tôt.