Re: Проблема с обработкой 502 кода в upstream/ip hash

Maxim Dounin mdounin на mdounin.ru
Пн Мар 20 16:13:30 UTC 2017


Hello!

On Mon, Mar 20, 2017 at 11:40:57AM -0400, BieZax wrote:

[...]

>                 proxy_next_upstream error timeout invalid_header http_500
> http_503 http_502 http_504;

[...]

> 2 строчки  из лога, идущие подряд:
> 10.105.5.152 - vasya [20/Mar/2017:17:03:15 +0300] "GET
> /abc/Account/Login?ReturnUrl=%2Fabc%2F HTTP/1.0" 200 3295 "-" "Mozilla/5.0
> (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87
> Safari/537.36" "wmmDEljC0bF6XGXtCV9/Ag==" "10.105.5.152" "0.136" "0.003,
> 0.113" "10.10.11.72:80, 10.10.11.71:80" "502, 200" "Microsoft-IIS/8.5"
> 10.105.5.152 - vasya  [20/Mar/2017:17:03:16 +0300] "POST
> /abc/ru-RU/Account/Login?ReturnUrl=%2Fabc%2F HTTP/1.0" 502 713
> "https://blahblah.ru/abc/Account/Login?ReturnUrl=%2Fabc%2F" "Mozilla/5.0
> (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87
> Safari/537.36" "wmmDEljC0bF6XGXtCV9/Ag==" "0.024" "0.004" "10.10.11.72:80"
> "502" "Microsoft-IIS/8.5"
> В  error логе  при этом  пусто.
> 
> Разве    при такой  конфигурации   фронтенд не должен всегда  спрашивать
> второй  сервер,  если   один  из них не отвечает? Почему   при одной и тоже 
>  конфигурации  получается  2   разных  реакции?

Проблема в том, что второй запрос - это POST.  POST - 
неидемпотентный метод, и по умолчанию POST-запросы nginx не 
повторяет, если запрос уже был отправлен на бекенд.  Если хочется, 
чтобы повторял, надо использовать "proxy_next_upstream ...  
non_idempotent".  Ну и помнить при этом, что некоторые бекенды 
могут оказаться к такому не готовы.

Подробнее тут:

http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#non_idempotent

-- 
Maxim Dounin
http://nginx.org/


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