Re: Проблемы с проксированием SSL
Maxim Dounin
mdounin на mdounin.ru
Вт Окт 12 17:28:20 MSD 2010
Hello!
On Tue, Oct 12, 2010 at 04:15:26PM +0400, Grigory Tuboltsev wrote:
> Добрый день,
>
> Пытаюсь организовать прокси с SSL, чтобы ssl-содинение создвал
> nginx, а данные по нему передавал сервер на локальном порту 8080.
>
> В nginx.conf:
>
> server
> {
> listen 443;
> server_name test.abc.ru;
> ssl on;
> ssl_certificate /etc/certs/abc.ru.crt;
> ssl_certificate_key /etc/certs/abc.ru.key;
>
> location /
> {
> proxy_pass http://127.0.0.1:8080;
> include /etc/nginx/proxy.conf;
> }
>
> В proxy.conf
> proxy_redirect default;
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>
> Всё поначалу отлично, при заходе на https://test.abc.ru показывается
> окошко логина в мой проксируемый сервер, но при попытке авторизации
> броузер выкидывает предупреждение об уходе с зашифрованной странице
> и переходе на незашифрованную. Что логично: видимо, броузер честно
> отправляет запрос и nginx честно перенаправляет его на
> http://127.0.0.1:8080 - с установкой нешифрованного соединения.
>
> Если я правильно понимаю, нужно переписывать nginx-ом какие-то
> заголовки, чтобы соединение устанавливалось опять на 443 порт, но не
> возьму в толк, какие и как.
>
> Кто-нибудь может подсказать, в чём дело ? Спасибо заранее.
При проксировании существует приблизительно две проблемы:
1. В отдаваемых бекендом страницах присутствуют абсолютные url'ы.
Это лечить мучительно (с помощью sub фильтра и такой-то матери),
но судя по всему это не ваш случай.
2. Бекенд отдаёт неправильные редиректы. Для решения этого
существует proxy_redirect:
http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_redirect
В вашем случае "proxy_redirect default" не работает судя по всему
потому, что вы на бекенд передаёте Host оригинального запроса, и
бекенд возвращает редиректы на http://test.abc.ru:8080 (а не на
http://127.0.0.1:8080).
Лечить просто - посмотреть что именно возвращает бекенд и
прописать соответствующий proxy_redirect.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru