On Thu, 22 Oct 2009, dim-dim77 wrote:
> Добрый день
>
> nginx/0.8.17
>
> Есть конструкция:
>
> server {
....
> ssl on;
....
> 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 SSL_VERIFY $ssl_client_verify;
....
> location / {
> proxy_pass http://127.0.0.1/;
> }
> }
>
> Так вот, если я захожу на сервер через прокси-сервер, то на бэкенд не
> передается заголовок Via, а в заголовке X-Forwarded-For записан только
> IP адрес прокси-сервера.
>
> Если же поставить "ssl off", то на бэкэнд нормально передается заголовок
> Via, а в X-Forwarded-For записан и IP прокси-сервера, и IP клиента.
Предположу, что когда вы "ставите "ssl off"", вы ещё и в адресной строке
схему меняете с 'https' на 'http'. Так ведь?
В таком случае ваш прокси-сервер будет добавлять заголовки "Via: " и
"X-Forwarded-For: " в запрос к серверу - потому что "видит" открытый текст
http-запроса.
Когда же вы заходите на https-enabled сервер прокси-сервер, то ваш
прокси-сервер не видит никаких http-запросов\ответов - он только выполняет
просьбу клиента соединить его с сервером напрямую, прозрачным
TCP-туннелем, внутри которого браузер и сервер строят защищённое по
протоколу SSL соединение.
Соответственно, с точки зрения https-сервера к нему пришёл прямой (без
прокси) клиент с ip-адреса прокси - о чём он и уведомляет бэкенд
выставлением заголовка "X-Forwarded-For: <IP адрес прокси-сервера>"
А IP-адреса конечного клиента - сервер в такой ситуации не знает.
--
Best regards,
Andrew Kopeyko <kaa@zvuki.ru>