Назад | Перейти на главную страницу

nginx ssl-прокси для нескольких серверов apache

У меня есть несколько серверов веб-приложений nodejs через HTTP, и мне нужно сертифицировать запросы, отправленные на эти серверы. Я думал об использовании nginx в качестве прокси для запросов, сертифицируя только сервер nginx с сертификатом SSL, чтобы данные / изображения, отправленные обратно клиенту, обслуживались через HTTPS.

Я думал об этой структуре:

                                   +--- app1 ---> node.js on ip:10001
                                   |
client --> https --> nginx --> http --- app2 ---> node.js on ip:10002
                                   |
                                   +--- app3 ---> node.js on ip:10003

Меня беспокоит объект ответа от проксированного запроса. Браузеры на основе Webkit и Safari предупреждают меня, что мое приложение работает по протоколу HTTPS, но обслуживает контент через HTTP (предупреждение о смешанном содержимом).

При сертификации прокси-сервера мой ответ клиенту будет подтвержден как HTTPS или как HTTP?

У моего прокси-сервера nginx будет сертифицированный поддомен, например proxy.domain.com, поэтому запросы будут выполняться, например, как "https://proxy.domain.com:10001". Запрос выполняется через HTTPS к прокси-серверу, но возвращаемое содержимое сервера передается через HTTP. Как прокси-сервер будет воздействовать на такое возвращенное содержимое?

Будет ли он применять шифрование SSL и, следовательно, отправлять обратно ресурс следующим образом: "https://proxy.domain.com:10001/resource.png"

Заранее спасибо всем

то, что вы пытаетесь, называется завершением SSL. Это когда обратный прокси обрабатывает SSL, а затем перенаправляет запрос на прокси-сервер по протоколу HTTP. Таким образом, у клиента будет HTTPS-соединение, но от обратного прокси (nginx) к прокси-серверу (apache) будет HTTP-соединение. В nginx вы делаете следующее:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;

    location /{
        proxy_pass http://upstream_name:80;
        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 X-Forwarded-Scheme $scheme;
    }
}

Если вы хотите изучить его больше, вы можете использовать эту официальную документацию от Nginx. https://www.nginx.com/resources/admin-guide/nginx-ssl-termination/. Что касается смешанного контента, я думаю, что то же самое с @Bert. Возможно, это потому, что в HTML вы все еще обслуживаете протокол http.