Можете ли вы прекратить SSL для обслуживания пользовательских страниц ошибок, но повторно зашифровать перед передачей на целевой сервер? - PullRequest
0 голосов
/ 21 января 2019

У меня много неработающий сервер разработки, и я пытаюсь использовать свой стабильный статический веб-сервер для предоставления пользовательских страниц с сообщениями об ошибках в соединениях с ошибками. Однако я не чувствую себя комфортно, оставляя общение открытым текстом между прокси / балансировщиком нагрузки и сервером разработки. Как или я могу расшифровать и повторно зашифровать связь между client-proxy и proxy-devServer, перехватывая любые сообщения об ошибках? У меня есть образец конфигурации, но я уверен, что неправильно понимаю.

 server {
    listen 443;

    #send to the dev server
    proxy_pass 192.168.1.2:443;

    #decrypt downstream ssl
    ssl_certificate     /etc/ssl/certs/frontend.crt;
    ssl_certificate_key /etc/ssl/certs/frontend.key;

    #Serve custom error page
    error_page 500 502 503 504 /custom_50x.html;
    location = /custom_50x.html {
         root /var/www/errors/html;
         internal;
    }

    #Encrypt upstream communication to the dev server
    proxy_ssl  on;
    proxy_ssl_certificate     /etc/ssl/certs/backend.crt;
    proxy_ssl_certificate_key /etc/ssl/certs/backend.key;
}

1 Ответ

0 голосов
/ 22 января 2019

HTTP-сервер Nginx не может проходить через SSL-соединения (AFAIK), поэтому необходимо завершить SSL на этом сервере. Восходящее SSL-соединение устанавливается с помощью https:// в операторе proxy_pass. Подробнее см. в этом документе .

Например:

server {
    listen 443 ssl;

    #decrypt downstream ssl
    ssl_certificate     /etc/ssl/certs/frontend.crt;
    ssl_certificate_key /etc/ssl/certs/frontend.key;

    location / {
        #send to the dev server
        proxy_pass https://192.168.1.2;

        # Using `https` with an IP address, you will need to provide
        # the correct hostname and certificate name to the upstream
        # server. Use `$host` if it's the same name as this server.

        proxy_set_header Host $host;
        proxy_ssl_server_name on;
        proxy_ssl_name $host;
    }

    #Serve custom error page
    error_page 500 502 503 504 /custom_50x.html;
    location = /custom_50x.html {
        root /var/www/errors/html;
        internal;
    }    
}

Директива proxy_ssl относится только к потоковому серверу. Директивы proxy_ssl_certificate относятся к проверке подлинности сертификата клиента, которая может вам потребоваться или не потребоваться. Кроме того, вы пропустили суффикс ssl в операторе listen. Подробнее см. в этом документе .

...