ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: strange redirect



Igor Sysoev wrote:
On Thu, Feb 21, 2008 at 03:05:26PM -0800, Konstantin Svist wrote:

Прошу прощения что продолжаю Вас отвлекать на эту тему, но хочется в голове всё уложить по порядку :)


http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23
говорит что "Host" - это domain/port сервера который запрашивается (что необходимо если сервер виртуальный)

Почему, тогда, этот заголовок изменяется по умолчанию -- и почему только после этого его всё работает?

По умолчанию он изменяется на $proxy_host, потому что это именно то, что
удалённый сервер обычно ожидает увидеть.


Но всегда-ли "удалённый" сервер ожидает $proxy_host? Какие по этому делу правила?

У меня стоит Cherrypy (cherrypy.org) и если я оставляю HOST как $proxy_host, он не может правильно сделать редирект. Он ожидает '/' на конце URL-а, и если того не указать, он посылает редирект на себя+'/'

Пример #1:
Интернет --> порт 80 (брандмауэр) --> 1080 (nginx) --> 8080 (cherrypy, внутренний сервер)
Страница http://example.com/foo/
Запрос http://example.com/foo   -- без '/'

- proxy_set_header HOST $proxy_host;
 ответ: 302 http://example.com:1080/foo/
  ... страница, естественно, не доступна (т.к. 1080 за брандмауэром)

- proxy_set_header HOST $http_host;
 ответ: 302 http://example.com/foo/
  ... вроде работает

- proxy_set_header HOST $host;
 ответ: 302 http://example.com/foo/
  ... вроде работает




Если бы всё работало, хрен бы с ним.. но вот дальше проблемы:




Пример #2:
Интернет --> порт 80 (брандмауэр) --> 1081 (nginx) --> rsportscars.com:80 (удалённый сервер, через интернет)
Страница/запрос: http://rsportscars.example.com/

- proxy_set_header HOST $proxy_host;
 ответ: 200
  ... работает

- proxy_set_header HOST $http_host;
 301 http://rsportscars.example.com:1081/
  ... страница не доступна (1081 за брандмауэром)

- proxy_set_header HOST $host;
 301 http://rsportscars.example.com:1081/
  ... страница не доступна (1081 за брандмауэром)



Почему это происходит?





 




Copyright © Lexa Software, 1996-2009.