Mam kilka serwerów działających na tym samym komputerze, niektóre tylko z http, niektóre z zarówno http, jak i https. Istnieje kilka bloków serwera zdefiniowanych w osobnych plikach, które są zawarte w głównym pliku konfiguracyjnym.
Skonfigurowałem „domyślny” serwer http, który będzie obsługiwał ogólną „stronę konserwacji” dla żądań, które nie pasują do żadnej z pozostałych nazw serwerów w innych plikach konfiguracyjnych. Domyślny serwer http działa zgodnie z oczekiwaniami, używa nazwy serwera „_” i pojawia się jako pierwszy na liście dołączeń (ponieważ zauważyłem, że w przypadku zduplikowanych nazw serwerów na serwerach używany jest ten, który pojawia się jako pierwszy). To działa świetnie.
Spodziewałbym się tego samego dokładnego bloku serwera (tylko przełączenie „Listen 80 default_server” na „Listen 443 default_server”, a także zamiast wyświetlania strony „return 444”), ale tak nie jest. Zamiast tego wydaje się, że nowy domyślny serwer https faktycznie przechwytuje wszystkie przychodzące połączenia https i powoduje ich awarię, chociaż inne bloki serwera mają bardziej odpowiednie nazwy_serwera dla przychodzących żądań. Usunięcie nowego domyślnego serwera https spowoduje wznowienie częściowo niepoprawnych zachowań: strony internetowe z https załadują się poprawnie; ale witryny bez https będą przekierowywane na pierwszy serwer https w plikach dołączanych (które zgodnie z dokumentami, jeśli nie pojawi się „serwer_ domyślny”, to pierwszy blok serwera, który się pojawi, będzie „domyślny”).
Moje pytanie brzmi: jaki jest prawidłowy sposób zdefiniowania „domyślnego serwera” w nginx dla połączeń ssl? Dlaczego po jawnym ustawieniu „default_server” staje się chciwy i pobiera wszystkie połączenia, a gdy domyślnie pozwalam nginx decydować o „domyślnym serwerze”, działa tak, jakbym się spodziewał (z niepoprawnym serwerem ustawionym jako domyślny i innymi prawdziwymi serwerami zachowuje się poprawnie)?
Oto moje „domyślne serwery”. HTTP działa bez niszczenia innych serwerów. Https psuje inne serwery i zużywa wszystko.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
Czy ktoś z was widzi, co może być nie tak?