2015-10-21 15 views
6

Ho un server master nginx che decide il nome del server in entrata su cui instradare le richieste. Per due server secondari questo server master nginx detiene anche certificati e chiavi ssl. Il terzo server è in possesso dei propri certificati e chiavi in ​​quanto vi è un frequente processo di aggiornamento per quelli.nginx: inoltro connessione ssl ad un altro server

La mia domanda è ora come posso configurare il server master nginx per inoltrare tutte le richieste al server 3 che stanno arrivando per questo server. Non riesco a copiare i certificati e le chiavi dal server 3 al server master poiché cambiano troppo spesso.

overview servers and http(s) connections

risposta

2

Ecco una configurazione che potrebbe funzionare. Proxy attraverso il master e inoltra tutto a Server3. Usa la porta ssl ma disattiva ssl.

server { 
    listen  443; 
    server_name myserver.mydomain.whatever; 

    ssl   off; 

    access_log  /var/log/nginx/myserver.access.log; 
    error_log  /var/log/nginx/myserver.error.og; 

    keepalive_timeout 60; 

    location/{ 
     set $fixed_destination $http_destination; 
     if ($http_destination ~* ^https(.*)$) 
     { 
      set $fixed_destination http$1; 
     } 

     proxy_set_header  Host $host; 
     proxy_set_header  X-Real-IP $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header  X-Forwarded-Proto $scheme; 
     proxy_set_header Destination $fixed_destination; 
     # Fix the “It appears that your reverse proxy set up is broken" error. 
     # might need to explicity set https://localip:port 
     proxy_pass   $fixed_destination; 
     # force timeout if backend died. 
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; 
     proxy_read_timeout 90; 
     proxy_redirect http:// https://; 
    } 
} 
+0

Grazie per il vostro aiuto. Non sono abbastanza sicuro di avere tutto a posto. Cosa dovrei fare con la definizione del server per 'listen 80;'? Reindirizzarlo a 443 sul server master nginx e quindi utilizzare il codice di esempio? Dove nell'esempio specifichi a quale IP internamente viene inoltrata la richiesta? –

+0

L'ho provato in entrambi i modi. O ottengo un errore nel registro nginx che dice '2015/10/22 11:34:21 [errore] 18229 # 0: * 57916 prefisso URL non valido in" ", client: xxx.xxx.xxx.xxx, server: my_server_name , richiesta: "GET/HTTP/1.1 $" o il browser dice direttamente che non è possibile stabilire alcuna connessione sicura e rifiuta di connettersi –

+1

Sembra che non sia possibile Nginx non esegue il proxy forward [https e nginx come proxy forward] (https://forum.nginx.org/read.php?2,15124,15256#msg-15256). – wolfhammer