2011-09-14 13 views
5

Uruchamiam nginx dla zawartości statycznej i jako serwer proxy dla Apache/mod_wsgi obsługujących django. Mam example.com i test.example.com jako serwer proxy dla Apache/Django i static.example.com, który obsługuje wszystkie pliki statyczne bezpośrednio przez nginx. Mam certyfikat SSL z wildcard, aby każda z tych subdomen mogła korzystać z SSL (a ja mam tylko jeden adres IP).Dlaczego funkcja nasłuchiwania `443 default_server ssl` działa dla wielu nazw serwerów w nginx?

Dlaczego jest to, że podczas korzystania listen 443 default_server ssl; w albo test.example.com lub example.com, działa SSL zarówno dla jeszcze muszę wyraźnie słuchać 443 dla static.example.com?

ssl_certificate   /etc/ssl/certs/example.chained.crt; 
ssl_certificate_key  /etc/ssl/private/example.key; 

server { 
    listen  80; 
    listen  443; 
    server_name static.example.com; 
    # ... serves content ... 
} 

server { 
    listen  80; 
    listen  443 default_server ssl; 
    server_name example.com; 
    # ... proxy pass to http://example.com:8080 (apache) ... 
} 
server { 
    listen  80; 
    # why don't I need `listen 443;` here? 
    server_name test.example.com; 
    # ... proxy pass to http://test.example.com:8080 (apache) ... 
} 

Odpowiedz

3

Protokół SSL sam (bez rozszerzenia SNI) używa adresu IP serwera, aby zażądać certyfikatu SSL. Z SNI przekazuje również nazwę hosta (nie działa dla Win XP), ale to nie powinno mieć znaczenia tutaj.

Dyrektywy dotyczące serwerów nie są dokładnie zgodne. To "najbliższy" mecz. Może się wydawać, że "działa", ale może zakończyć się nieprawidłową dyrektywą serwera. Trudno powiedzieć bez dodatkowych informacji, takich jak główny serwer.

Najważniejsze jest to, że zawsze będzie działać, ponieważ wydaje się, że używasz jednego adresu IP.

+0

Zgadzam się z Łukaszem, wygląda na to, że zadziała, ale nie będę polegał na tej konfiguracji. Powinieneś jawnie dodać słuchać 443 –

Powiązane problemy