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 за брандмауэром)
Почему это происходит?
 
 
 |