J'ai un nginx et différents sous-domaines:
a.mydomain.com
b.mydomain.com
c.mydomain.com
Nginx a 4 règles:
1) règle de réécriture:
server {
listen 80
server_name gl.udesk.org;
root /nowhere;
rewrite ^ https://a.mydomain.com$request_uri permanent;
}
2) règle https:
server {
listen 443;
server_name a.mydomain.com;
root /home/a/a/public;
ssl on;
ssl_certificate conf.d/ssl/a.crt;
ssl_certificate_key conf.d/ssl/a.key;
ssl_protocols ...
ssl_ciphers ...
ssl_prefer_server_ciphers on;
location ...
}
3) règle http par défaut:
server {
listen 80 default_server;
return 444;
}
4) règle https par défaut:
server {
listen 443 default_server;
return 444;
}
Donc si je lance nginx et:
- Si je vais dans le navigateur pour http://a.mydomain.com, il redirige vers https://a.mondomaine.com , puis renvoie une erreur 107 (net :: ERR_SSL_PROTOCOL_ERROR): erreur de protocole SSL.
- si je vais dans le navigateur à https://b.mydomain.com j'attends qu'il renvoie l'erreur 444. Mais au lieu de cela, il renvoie la même erreur 107 (net :: ERR_SSL_PROTOCOL_ERROR): erreur de protocole SSL.
- et ainsi de suite pour tous les inscrits par les CNAME du fournisseur DNS (c'est-à-dire a, b, c)
- toutes les versions http (par exemple, la règle 3 -) fonctionnent comme prévu:
- http://a.mydomain.com redirige vers la version https: //,
- http://b.mydomain.com et http://c.mydomain.com renvoient une erreur 444 telle que configurée.
Pourquoi les règles https de nginx sont-elles si difficiles à configurer et comment dois-je les configurer correctement pour obtenir le même comportement que pour la version http?
Mettre à jour:
Créer un nouveau certificat et ajouter:
ssl on;
ssl_certificate conf.d/ssl/default.crt;
ssl_certificate_key conf.d/ssl/default.key;
fonctionne maintenant, mais j'aurais une solution sans aucun certificat SSL nécessaire. Il suffit de réinitialiser toutes les connexions pour tous les sous-domaines https (port 443), à l'exception de https://a.mydomain.com, sans fournir de certificat.
nginx
n'est pas assez intelligent pour se rendre compte qu'il n'a pas besoin d'un certificat pour ce que l'utilisateur veut faire.