2011-09-14 3 views
5

Eseguo nginx per contenuto statico e come proxy per Apache/mod_wsgi che serve django. Ho example.com e test.example.com come proxy per Apache/Django e static.example.com che serve tutti i file statici direttamente tramite nginx. Ho un certificato SSL con caratteri jolly in modo che ciascuno di questi sottodomini possa utilizzare SSL (e ho solo un IP).Perché ascolta `443 default_server ssl` funziona per più nomi di server in nginx?

Perché è che quando si utilizza listen 443 default_server ssl; in sia test.example.com o example.com, SSL funziona per entrambi ma devo ascoltare in modo esplicito a 443 per 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) ... 
} 

risposta

3

Il protocollo SSL da solo (senza l'estensione SNI) utilizza l'indirizzo IP del server per richiedere il certificato SSL. Con SNI passa anche il nome host (non funziona per Win XP), ma non dovrebbe essere rilevante qui.

Le direttive del server non corrispondono esattamente. È la partita "più vicina". Potrebbe sembrare "lavoro", ma potrebbe finire nella direttiva sbagliata del server. È difficile dirlo senza ulteriori informazioni, come la radice del server.

Il punto è qualcosa funzionerà sempre poiché sembra che tu stia utilizzando un indirizzo IP singolo.

+0

Sono d'accordo con Luke, sembra che funzioni, ma non farei affidamento su quella configurazione. Probabilmente dovresti aggiungere esplicitamente ascoltare 443 –