Re: rewrite для несуществующих файлов

Maxim Dounin mdounin на mdounin.ru
Вт Окт 11 17:08:38 UTC 2011


Hello!

On Tue, Oct 11, 2011 at 09:41:27AM -0700, Roman Vasilyev wrote:

> On 10/11/2011 02:24 AM, Igor Sysoev wrote:
> >On Mon, Oct 10, 2011 at 11:48:43AM -0700, Roman Vasilyev wrote:
> >>Попробовал этот вариант, но к сожалению сервер отдает только 301 код.
> >>Но не пишет *Location: http://blah.....* а просто отдает контент этого
> >>документа, может быть можно какнибудь тут исхитриться тоже?
> >У меня в 1.1.5 выдаётся Location.
> Понял свою ошибку
> у меня было написано:
> 
> /blah/blah.html
> как только поменял на
> http://$host/blah/blah.html
> 
> все заработало.
> Но тут возникает следующий вопрос, у меня сервер находится за реверсным прокси, и он может перебивать hostname в урле, соответственно если запрос шел на http://blah/123 а прокси перебил его на http://1.1.1.1/123 то мы вместо *Location: http://blah/blah*,
> выдадим *Location: http://1.1.1.1/blah*, было бы супер не вбивать имя хоста в редиректе выдавая *Location: /blah*. Можно ли это сделать так же элегантно как это записано в вашей строке error_page?

В заголовке Location по стандарту допустим только абсолютный 
путь[1].

Даже если в "rewrite ... redirect" указан относительный путь - 
nginx сделает из него абсолютный (в зависимости от 
server_name_in_redirect/port_in_redirect - слегка по разному).

В случае, когда reverse proxy меняет Host - либо этот proxy должен 
сам заботится о правильной модификации заголовка Location (как 
e.g. nginx, см. директиву proxy_redirect), либо он должен 
как-то передавать исходный Host на бекенд, чтобы бекенд мог 
правильно формировать ссылки (e.g. с помощью админа и строки в 
конфиге бекенда).  Третьего не дано.

[1] http://tools.ietf.org/html/rfc2616#section-14.30

Maxim Dounin



Подробная информация о списке рассылки nginx-ru