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

Обратный прокси-сервер Nginx не загружает сайты HTTPS

Сегодня я впервые использовал Nginx. Я настроил его как выделенный обратный прокси-сервер, следуя нескольким инструкциям. Это то, что я пытаюсь воссоздать - http://www.integratedwebsystems.com/wp-content/uploads/2010/06/reverse_proxy.jpg

У меня он отлично работает с портом 80, но все, что загружено через HTTPS, дает мне ошибки о небезопасном HTTP-содержимом. Попытка загрузить любой HTTPS-сайт через обратный прокси-сервер через Интернет выглядит очень неправильной. Внутренняя загрузка работает нормально.

Пример - http://i.imgur.com/i9mYgYe.png - Предполагается, что это админ-консоль Wordpress, она похожа на что-то из 90-х.

Ниже приведена конфигурация nginx, которую я использую -

server {
   listen 80;
   server_name domain1.com;
   location / {
      proxy_pass http://192.168.1.149/;
      proxy_set_header Host $host;
   }
}

# HTTPS server

server {
    listen 443 ssl;
    server_name domain1.com;

    error_log /tmp/error.log;

        ssl on;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_certificate /etc/nginx/ssl/server.crt;


    location / {
        proxy_pass http://192.168.1.149/;
        proxy_set_header Host $host;
    }
}

Может ли кто-нибудь посоветовать мне, что мне не хватает, чтобы HTTPS работал правильно через обратный прокси?

Вы ничего не упускаете; вы правильно настроили nginx.

Проблема здесь в том, что WordPress считает, что он должен генерировать HTTP-ссылки. Когда вы пытаетесь получить к нему доступ через HTTPS, он по-прежнему генерирует все свои ссылки с http:// и поэтому они не могут быть загружены (без явной загрузки небезопасного содержимого в браузере).

Существуют плагины WordPress, которые преобразуют вашу консоль администратора в https, если вы это пытаетесь сделать. Вы также можете отредактировать общие настройки своего блога и быстро и легко преобразовать весь сайт в https без плагина.

Если вы можете себе это позволить, вы можете попробовать повторно зашифровать трафик:

location / {
    proxy_pass https://192.168.1.149/;
    proxy_set_header Host $host;
}

Очевидно, что тогда сервер приложений будет знать о SSL.

Другой способ - настроить альтернативный порт Apache, например

location / {
    proxy_pass http://192.168.1.149:444/;
    proxy_set_header Host $host;
}

с vhost, который устанавливает соответствующие флаги, чтобы Wordpress / PHP полагал, что запрос действительно был зашифрован, например

SetEnv SSL=on

Уловить все необходимые / достаточные настройки бывает непросто.