2015-10-21 3 views
6

J'ai un serveur nginx maître qui décide du nom du serveur entrant vers lequel acheminer les demandes. Pour deux serveurs secondaires, ce serveur maître nginx contient également des certificats et des clés ssl. Le 3ème serveur détient ses propres certificats et clés car il existe un processus de mise à jour fréquent pour ceux-ci.nginx: transmettre la connexion ssl à un autre serveur

Ma question est maintenant comment je peux configurer le serveur maître nginx pour transmettre toutes les demandes au serveur 3 qui arrivent pour ce serveur. Je ne peux pas copier les certificats et les clés du serveur 3 sur le serveur maître car ils changent trop souvent.

overview servers and http(s) connections

Répondre

2

Voici une configuration qui pourrait fonctionner. Proxy via le maître et transférer tout à Server3. Utilisez le port ssl mais désactivez 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

Merci pour votre aide. Je ne suis pas tout à fait sûr si tout va bien. Que dois-je faire avec la définition du serveur pour 'écouter 80;'? Rediriger vers 443 sur le serveur maître nginx, puis utilisez votre exemple de code? Où dans votre exemple spécifiez-vous l'adresse IP interne à laquelle la demande est transmise? –

+0

Je l'ai testé dans les deux sens. Soit je reçois une erreur dans le journal de nginx disant '2015/10/22 11:34:21 [erreur] 18229 # 0: * 57916 préfixe d'URL invalide dans" ", client: xxx.xxx.xxx.xxx, serveur: mon_server_name , demande: "GET/HTTP/1.1 $' ou le navigateur dit directement qu'aucune connexion sécurisée n'a pu être établie et refuse de se connecter –

+1

On dirait que ce n'est pas possible Nginx ne fait pas de proxy direct. [https et nginx comme proxy direct] (https://forum.nginx.org/read.php?2,15124,15256#msg-15256). – wolfhammer