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