Сегодня я впервые использовал 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
Уловить все необходимые / достаточные настройки бывает непросто.