J'ai plusieurs serveurs fonctionnant sur le même ordinateur, certains avec http uniquement, d'autres avec http et https. Plusieurs blocs de serveur sont définis dans des fichiers séparés, inclus dans le fichier de configuration principal.
J'ai mis en place un serveur "par défaut" pour http qui servira une "page de maintenance" générique aux demandes qui ne correspondent à aucun des autres noms de serveur dans les autres fichiers de configuration. Le serveur http par défaut fonctionne comme prévu, il utilise le nom_serveur "_" et il apparaît en premier dans la liste des inclus (car j'ai observé que, dans le cas de doublons de noms de serveur sur plusieurs serveurs, celui qui apparaît en premier est utilisé). Cela fonctionne très bien.
Je m'attendrais au même bloc de serveur exact (en commutant seulement "listen 80 default_server" sur "listen 443 default_server" et aussi au lieu de servir la page "return 444"), mais ce n'est pas le cas. Au lieu de cela, il semble que le nouveau serveur https par défaut récupère toutes les connexions https entrantes et les cause à leur échec, bien que les autres blocs du serveur aient des noms de serveur plus appropriés pour les demandes entrantes. La suppression du nouveau serveur https par défaut entraîne la reprise d'un comportement semi-correct: les sites Web dotés de https se chargeront tous correctement; mais les sites Web sans https seront tous routés vers le premier serveur https dans les fichiers d'inclusion (qui, selon la documentation, n'indique pas "default_server", le premier bloc de serveur à apparaître sera "default").
Ma question est donc la suivante: quelle est la bonne façon de définir un "serveur par défaut" dans nginx pour les connexions ssl? Pourquoi est-ce que quand je définis explicitement un "serveur_de_faut", il devient gourmand et saisit toutes les connexions alors que quand je laisse implicitement nginx décider du "serveur par défaut", il fonctionne comme je le pensais (avec le serveur incorrect défini par défaut et les autres serveurs réels se comporter correctement)?
Voici mes "serveurs par défaut". Http fonctionne sans casser d'autres serveurs. Https casse d'autres serveurs et consomme tout.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
Quelqu'un parmi vous voit ce qui pourrait être faux ici?