Bir nginx ve farklı alt alan adlarım var:
a.mydomain.com
b.mydomain.com
c.mydomain.com
Nginx'in 4 kuralı vardır:
1) yeniden yazma kuralı:
server {
listen 80
server_name gl.udesk.org;
root /nowhere;
rewrite ^ https://a.mydomain.com$request_uri permanent;
}
2) https kuralı:
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) http varsayılan kuralı:
server {
listen 80 default_server;
return 444;
}
4) https varsayılan kuralı:
server {
listen 443 default_server;
return 444;
}
Eğer nginx ve başlarsanız:
- tarayıcıda http://a.mydomain.com adresine gidersem https://a.mydomain.com adresine yönlendirir ve sonra bir Hata 107 (net :: ERR_SSL_PROTOCOL_ERROR): SSL protokol hatası verir.
- tarayıcıda https://b.etkialanim.com adresine gidersem Hata 444'ü geri döndürmesini beklerim. Ancak bunun yerine aynı Hata 107'yi (net :: ERR_SSL_PROTOCOL_ERROR) döndürür: SSL protokolü hatası.
- ve böylece DNS sağlayıcısı CNAME'ler tarafından kaydedilen herkes için (yani a, b, c)
- beklendiği gibi çalışan tüm http sürümleri (ör. kural 3 -):
- http://a.alan_adim.com.tr https: // sürümüne,
- http://b.alanadim.com ve http://c.alanadim.com , yapılandırıldığı gibi bir Hata 444 döndürüyor.
Nginx'teki https kurallarının yapılandırılması neden bu kadar zor ve http sürümüyle aynı davranışı elde etmek için bunları nasıl düzgün bir şekilde yapılandırmalıyım?
Güncelleme:
Yeni bir sertifika oluşturma ve ekleme:
ssl on;
ssl_certificate conf.d/ssl/default.crt;
ssl_certificate_key conf.d/ssl/default.key;
şimdi çalışıyor, ancak herhangi bir SSL sertifikası gerekmeden bir çözümüm olurdu. Bir sertifika vermeden https://a.alan_adim.com.tr hariç tüm https (bağlantı noktası 443) alt etki alanları için tüm bağlantıları sıfırlamanız yeterlidir .
nginx
kullanıcının ne yapmak istediğine ilişkin bir sertifikaya ihtiyaç duymadığını anlayacak kadar akıllı değildir.