Re: $upstream_addr содержит имя апстрима
Ruslan Ermilov
ru at nginx.com
Sat Dec 1 20:18:52 UTC 2012
On Sat, Dec 01, 2012 at 02:01:34AM +0400, umask wrote:
> Доброй ночи,
>
> имеется лог в таком формате:
>
> log_format main '$remote_addr\t'
> '$remote_user\t'
> '[$time_local]\t'
> '$msec\t'
> '$http_host\t'
> '$request\t'
> '$status\t'
> '$body_bytes_sent\t'
> '$http_referer\t'
> '$http_user_agent\t'
> '$http_x_forwarded_for\t'
> '$request_time\t'
> '$upstream_cache_status\t'
> '[$upstream_status]\t'
> '[$upstream_addr]\t'
> '[$upstream_response_time]\t'
> '$uid_set\t'
> '$uid_got\t'
> '$http_cookie\t'
> '$connection:$connection_requests\t';
>
> почти все записи в логе не вызывают никаких вопросов.
>
> Но есть вот такие (некоторые поля заменены для наглядности и приватности):
>
> 10.20.30.40 - [30/Nov/2012:06:14:01 +0400] 1354241641.781 domain.com GET /blog/1.php HTTP/1.1 502 6100 - Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 66.249.76.175 0.000 - [502] [web_backend] [0.000] - - - 88314:1
>
> 11.22.33.44 - [30/Nov/2012:08:23:09 +0400] 1354249389.371 domain.com GET /moscow HTTP/1.1 502 6100 - Opera/9.25 (Windows NT 5.0; U; en) - 0.000- [502] [web_backend] [0.000] - - cookiecookiecookie 565449:2
>
> 22.33.44.55 - [30/Nov/2012:08:23:09 +0400] 1354249389.729 domain.com GET /products/finance/search/ajax_in.php?region=NY HTTP/1.1 502 6100 http://domain.com/products/finance/search/ Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MAAU; MAAU) - 0.000 - [502] [web_backend] [0.000] - - cookiecookiecookie 565579:2
>
> Возникает вопрос. От чего в $upstream_addr попадает значение "[web_backend]"?
Это случается тогда, когда на момент обработки очередного запроса
оказывается, что все серверы в апстриме неживые, и соответственно
не делается ни одной попытки соединения. В error_log при этом
выводится ошибка "no live upstreams while connecting to upstream",
а счётчики "fails" у всех серверов апстрима сбрасываются в 0 для
быстрого восстановления.
> Разумеется, в конфиге присутствует определение астрима с именем web_backend:
> upstream web_backend {
> server www01 weight=2;
> server www02 weight=3;
> }
>
> И проксирование в этот апстрим:
> location ~* /branches/ {
> proxy_pass http://web_backend;
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> }
Подробная информация о списке рассылки nginx-ru