2 votes

Nginx: comment obtenir un serveur pour le cas où il n'y a pas d'en-tête Host:?

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.

1voto

Cupcake Protocol Points 537

La réponse se trouve dans la documentation: https://nginx.org/en/docs/http/server_names.html
Recherchez le mot "vide"

Correction: server_name "";

Barmar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X