Mam wieloznaczny certyfikat SSL i kilka subdomen na tym samym adresie IP. Teraz chcę, aby mój nginx obsługiwał tylko wspomniane nazwy serwerów i przerywał połączenia dla innych, aby wyglądało na to, że nginx
nie działa dla nazw serwerów niepublicznych (nie odpowiada, odrzuca, nie działa, ani jednego bajtu w odpowiedzi). Robię następujące
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;
//}
}
Próbowałem prawie wszystkiego w ostatnim bloku serwera, ale bez powodzenia. Otrzymuję poprawną odpowiedź od znanego wirtualnego serwera lub kod błędu. Proszę pomóż.
nginx
ssl
virtualhost
ssl-certificate
andbi
źródło
źródło
Odpowiedź cjc już poprawnie wskazywała na problem z próbą dopasowania nazw hostów, gdy włączony jest SSL. Można to jednak zrobić w następujący sposób:
Uwaga: tak, to prawda, że ogólnie
if
jest zły , aleif
w tym przypadku można go bezpiecznie używać . (Przeczytaj przekierowaną stronę, jeśli chcesz się przekonać).W przeciwieństwie do tego, co zostało zasugerowane, dodanie następującego bloku nie zadziała:
ponieważ
validname.domain.com
pasujący certyfikat SSL nie pasuje do losowej nazwy domeny. Próbowałem i nginx zachowywał się, jakby blok w ogóle nie był obecny.To również nie zadziała:
ponieważ spowoduje to niepowodzenie każdego połączenia HTTPS na porcie 443, nawet tych, które powinny przejść. Też tego próbowałem.
wget
zgłosił błąd uzgadniania protokołu SSL.źródło
Większość odpowiedzi tutaj dotyczy tego , dlaczego to nie działa, a nie, jak to zrobić.
Oto jak - musisz ustawić taki serwer typu catch-all na „default_server” i podać ścieżki do certyfikatu / klucza, aby mógł on odszyfrować przychodzące żądanie ssl i dopasować nagłówek hosta:
Zwróć uwagę na klucz ssl_certificate / ssl_certificate_key. Jeśli nie zostaną określone, nginx nadal próbuje użyć takiego serwera domyślnego i kończy się niepowodzeniem, ponieważ nie może zaakceptować połączenia ssl bez certyfikatu / klucza. Można użyć dowolnego certyfikatu / klucza, np. Z podpisem własnym. ...
Aby wygenerować samopodpisany certyfikat:
Zobacz także /server//a/841643/87439
źródło
Wdrożyłem powyższe rozwiązanie dzisiaj i działało płynnie. Wszystkie nieokreślone adresy URL są teraz usuwane. Umieszczenie tego kodu serwera przed faktycznym wpisem na serwerze wirtualnym było kluczowe - wszystkie źle sformułowane adresy URL trafiają teraz do tego „domyślnego” serwera.
źródło
Powinieneś być w stanie sobie z tym poradzić, ustawiając serwer, który obsługuje elementy niepubliczne, na pierwszy blok serwera w konfiguracji.
Wszystkie domeny nieokreślone konkretnie będą obsługiwane przez ten blok serwera.
źródło