2015-10-21 9 views
6

Mam serwer master nginx decydujący o nazwie serwera przychodzącego, do którego można kierować żądania. W przypadku dwóch drugorzędnych serwerów ten główny serwer nginx również przechowuje certyfikaty i klucze ssl. Trzeci serwer przechowuje własne certyfikaty i klucze, ponieważ proces ten jest często aktualizowany.nginx: połączenie do przodu ssl z innym serwerem

Moje pytanie brzmi teraz, jak mogę skonfigurować serwer główny nginx, aby przekazywał wszystkie żądania do serwera 3, które przychodzą na ten serwer. Nie mogę skopiować certyfikatów i kluczy z serwera 3 do serwera głównego, ponieważ zmieniają się one zbyt często.

overview servers and http(s) connections

Odpowiedz

2

Oto konfiguracja, która może działać. Proxy przez master i przekazuj wszystko do Server3. Użyj portu ssl, ale wyłącz 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

Dzięki za pomoc. Nie jestem do końca pewien, czy wszystko jest w porządku. Co mam zrobić z definicją serwera dla 'listen 80;'? Przekieruj go do 443 na serwerze master nginx, a następnie użyj swojego przykładu kodu? Gdzie w swoim przykładzie określasz, do którego IP wewnętrznie przekazywane jest żądanie? –

+0

Przetestowałem to na dwa sposoby. Albo dostaję błąd w dzienniku nginx, mówiąc: "2015/10/22 11:34:21 [błąd] 18229 # 0: * 57916 niepoprawny przedrostek adresu URL w" ", klient: xxx.xxx.xxx.xxx, serwer: moja_nazwa_serwera , żądanie: "GET/HTTP/1.1 $" lub przeglądarka bezpośrednio mówi, że nie można ustanowić żadnego bezpiecznego połączenia i odmawia połączenia .. –

+1

Wygląda na to, że nie jest możliwe Nginx nie przekazuje proxy. [https i nginx jako forward proxy] (https://forum.nginx.org/read.php?2,15124,15256#msg-15256). – wolfhammer

Powiązane problemy