Re: Обработка редиректов внутри

Vasiliy Shmelev shade at yandex-team.ru
Thu Feb 13 12:45:31 UTC 2014


И снова привет,

конфигурация, в целом, работает, но только один раз: при первом запросе 
цепочка отрабатывает как надо, переменная $upstream_http_location 
проставляется. При втором запросе, когда 301 берется из кеша, 
$upstream_http_location уже пустая. Есть ощущение, что при ответе 301 из 
кеша внутри не срабатывает модуль апстрима, и, соответственно, 
переменные заголовков пустые.

Можно это как-то обойти?

Alex Kapranoff wrote:
> * Igor Sysoev [August 31 2012, 18:15]:
>> On Fri, Aug 31, 2012 at 06:04:08PM +0400, Alex Kapranoff wrote:
>>> Привет!
>>>
>>> Есть простой прокси.  Хотим обрабатывать редиректы от апстримов внутри
>>> nginx -- так, чтобы они не доходили до браузера. Пусть браузер
>>> получает только последний ответ в цепочке. Не получается.
>>>
>>> Первая мысль для цепочки длинной 1: ловим редиректы с помощью
>>> error_page в именованый location со вторым proxy_pass внутри.  Однако
>>> до адреса, на который делается редирект, добраться не удаётся.
>>>
>>> Подскажете что-нибудь?
>> Как-то так:
>>
>>      resolver 127.0.0.1;
>>
>>      location / {
>>          ...
>>          proxy_intercept_errors  on;
>>          error_page  302  = @redirect;
>>      }
>>
>>      location @redirect {
>>          set  $redirect  $http_upstream_location;
>>          proxy_pass  $redirect;
>>      }
>
> Да, получается, с учётом поправки $http_upstream_ -->  $upstream_http_
>
> Спасибо!
>

-- 
Vasily Shmelev
project manager
Yandex
tel.: 7 (495) 739-70-00, ext.: 3241





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