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