Mam serwer WWW z wieloma serwerami wirtualnymi. Tylko 1 z nich to SSL. Problem polega na tym, że ponieważ nie istnieje blokujący serwer serwer nasłuchujący protokołu SSL, każde żądanie https do innych witryn jest obsługiwane przez 1 blok SSL.
Moja konfiguracja wygląda następująco:
# the catch all
server {
listen 80 default;
# I could add this, but since I have no default cert, I cannot enable SSL,
# and this listen ends up doing nothing (apparently).
# listen 443;
server_name _;
# ...
}
# some server
server {
listen 80;
server_name server1.com;
# ...
}
# some other server ...
server {
listen 80;
server_name server2.com;
# ...
}
# ... and it's https equivalent
server {
listen 443;
ssl on;
server_name server2.com;
# ...
}
Ponieważ teraz nie ma domyślnego nasłuchiwania dla 443, takie żądanie https://server1.com
zostanie obsłużone przez server2.com
blok https. Wynika to z logiki server_name
w docs.
Jeśli nie ma dopasowania, zostanie użyty blok serwera {...} w pliku konfiguracyjnym w następującej kolejności:
- blok serwera z pasującą dyrektywą nasłuchującą oznaczoną jako [default | default_server]
- pierwszy blok serwera z pasującą dyrektywą Listen (lub niejawnie Listen 80;)
Jakie jest preferowane rozwiązanie tego problemu? Czy muszę skonfigurować atrapę certyfikatu do przechwytywania wszystkich bloków serwera, aby móc słuchać na 443 i obsługiwać złe żądania? Czy jest parametr, którego nie znam, a który wymusza dokładne dopasowanie nazwy hosta server
?