Je veux définir un bloc de serveur passe-partout par défaut pour gérer tous les noms d'hôte qui ne correspondent pas à mon _ server_name
valeurs. Mais je ne sais pas lequel utiliser.
server {
listen 80 default_server;
server_name ""; # this is by default if no server_name specified
return 444;
}
ou
server {
listen 80 default_server;
server_name _;
return 444;
}
J'ai testé et ils semblent se comporter également. Y a-t-il une différence entre eux?
Réponse courte: Oui, il y a une différence entre server_name "";
et server_name _;
Longue réponse: server_name "";
définit une correspondance pour une demande sans Host
en-tête depuis le 0.8.48 et il est supporté depuis le 0.7.12.
https://nginx.org/en/docs/http/request_processing.html
Si les demandes sans le champ d'en-tête "Host" ne doivent pas être autorisées, un serveur qui supprime simplement les demandes peut être défini:
server { listen 80; server_name ""; return 444; }
Ici, le nom du serveur est défini sur une chaîne vide qui correspondra aux demandes sans le champ d'en-tête "Host", et un code non standard 444 spécial de nginx est renvoyé qui ferme la connexion.
D'un autre côté, server_name _;
définit un nom de serveur invalide qui ne croise jamais avec un vrai nom. C'est juste une non-correspondance. Donc, en cas d'absence de correspondance, nginx sélectionnera le premier bloc du serveur {} et l'utilisera.
Pour conclure, vous pouvez utiliser server_name _;
pour le bloc serveur fourre-tout mais pas server_name "";
.
Référence - https://stackoverflow.com/questions/9454764/nginx-server-name-wildcard-or-catch-allhttps://blog.gahooa.com/2013/ 08/21/nginx-comment-spécifier-un-serveur-par-défaut /