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