J'ai un certificat SSL générique et plusieurs sous-domaines sur la même IP. Maintenant, je veux que mon nginx gère uniquement les noms de serveur mentionnés et supprime la connexion pour les autres afin qu'il ne semble nginx
pas fonctionner pour les noms de serveur non répertoriés (ne répond pas, rejette, mort, pas un seul octet en réponse). Je fais ce qui suit
ssl_certificate tls/domain.crt;
ssl_certificate_key tls/domain.key;
server {
listen 1.2.3.4:443 ssl;
server_name validname.domain.com;
//
}
server {
listen 1.2.3.4:443 ssl;
server_name _;
// deny all;
// return 444;
// return 404;
//location {
// deny all;
//}
}
J'ai essayé presque tout dans le dernier bloc serveur, mais sans succès. J'obtiens une réponse valide du serveur virtuel connu ou un code d'erreur. Veuillez aider.
La réponse de cjc a déjà correctement signalé le problème avec la tentative de correspondance des noms d'hôte lorsque SSL est activé. Cependant, il est possible de le faire, comme ceci:
Remarque: oui, il est vrai que généralement
if
c'est mal , mais il est sûr à utiliserif
dans ce cas. (Lisez la page liée si vous devez vous convaincre.)Contrairement à ce qui a été suggéré, l'ajout du bloc suivant ne fonctionnera pas:
car un certificat SSL qui correspond
validname.domain.com
ne correspondra pas à un nom de domaine aléatoire. Je l'ai essayé et nginx a agi comme si le bloc n'était pas présent du tout.Cela ne fonctionnera pas non plus:
car cela entraînera l' échec de chaque connexion HTTPS sur le port 443, même celles qui devraient passer. J'ai essayé celui-ci aussi.
wget
a signalé une erreur de négociation SSL.la source
La plupart des réponses ici expliquent pourquoi cela ne fonctionne pas, pas comment le faire fonctionner.
Voici comment - vous devez faire de ce serveur fourre-tout un 'serveur_par défaut' et devez fournir des chemins vers cert / key afin qu'il puisse décrypter la requête SSL entrante et correspondre à l'en-tête Host:
Notez la clé ssl_certificate / ssl_certificate_key. S'ils ne sont pas spécifiés, nginx essaie toujours d'utiliser un tel serveur par défaut et échoue car il ne peut pas accepter la connexion SSL sans certificat / clé. On peut utiliser n'importe quel certificat / clé, par exemple auto-signé. ...
Pour générer un certificat auto-signé:
Voir également /server//a/841643/87439
la source
J'ai implémenté la solution ci-dessus aujourd'hui, et cela a fonctionné à merveille. Toutes les URL non spécifiées sont supprimées, maintenant. Placer ce code de serveur avant l'entrée réelle du serveur virtuel était la clé - toutes les URL mal formées vont maintenant à ce serveur «par défaut».
la source
Vous devriez pouvoir gérer cela en faisant du serveur qui gère les éléments non répertoriés le premier bloc serveur de votre configuration.
Tous les domaines non spécifiquement identifiés seront gérés par ce bloc serveur.
la source