Привет У меня есть следующая довольно простая конфигурация для балансировки нагрузки/сбой:Nginx пытается прокси проход к входу Name
upstream backend_stream {
server 192.168.0.130:8080 max_fails=2 fail_timeout=30s;
server 192.168.0.131:8080 max_fails=2 fail_timeout=30s backup;
}
server {
listen 443 ssl;
server_name exmaple.com;
# SSL stuff
proxy_ignore_client_abort on;
proxy_connect_timeout 3s;
proxy_read_timeout 5s;
proxy_send_timeout 5s;
send_timeout 20s;
proxy_next_upstream_timeout 60s;
proxy_next_upstream_tries 0;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 non_idempotent;
proxy_pass http://backend_stream;
access_log /path/to/access.log vhosts_extra;
error_log /path/to/error.log;
}
И следующий формат журнал доступа:
log_format vhosts_extra '$host:$server_port $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" [$upstream_addr - $upstream_response_time] $request_time';
Наиболее важного является частью в конце: [$upstream_addr - $upstream_response_time]
. Я регистрирую, какой сервер восходящего сервера был выбран, и каковы ответы серверов восходящего потока. Nginx docs.
С такой конфигурацией я хотел проверить, какой трафик он может обрабатывать. Для этого я использовал инструмент командной Benchmark строки Apache отправить несколько одновременно максимально запросы в то время, как следует:
ab -T application/json -H 'Authorization: Basic XXX' -p ab_post.json -n 1000 -c 30 https://example.com
И моя конфигурация обрабатывает запросы на некоторое время, пока она не начнет задыхаться (который это нормально, мои приложения имеют свои ограничения). Но когда первый сервер начинает перегружаться, а nginx должен начать использовать сервер резервного копирования, происходит что-то странное. Время от времени nginx пытается передать запрос не на восходящий сервер, а на восходящее название! который, конечно, не существует как хост. ... [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.051
Смотрите фрагмент журнала:
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 3.730] 8.783
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 3.843] 3.907
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 3.942] 9.003
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.044] 4.106
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.125] 9.182
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.249] 4.309
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.306] 9.372
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.410] 4.477
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.001, 4.504] 9.566
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.583] 4.642
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.707] 9.770
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.798] 4.860
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.884] 9.945
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.048
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 504 176 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 5.002] 10.061
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.051
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 504 176 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.001, 5.000] 10.059
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.052
Иногда пытается действительно трудно ...
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.002, 0.000] 5.050
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.048
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.064
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.065
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.059
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.062
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.064
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.063
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.066
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.051
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.055
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.066
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.057
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.032
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:01 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.001
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:01 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.002, 0.000] 5.002
Моя догадаться, что это происходит, когда все потоковые сервера помечаются как " неудача ", но это всего лишь предположение. Я не могу найти ничего такого поведения в документах или в другом месте.
Это нормальное поведение, и я должен просто знать, что это может произойти, или я делаю что-то неправильно?
В Nginx вверх по течению enter link description here документы стоит:
Если происходит ошибка во время связи с сервером, то запрос будет передан следующему серверу, и так далее, пока все серверы функционирующими не будут опробованы. Если успешный ответ не может быть получен с любого из серверов, клиент получит результат связи с последним сервером.
Худшая часть - это момент ответа 502 Bad Gateway
.
Некоторая информация среда:
nginx version: nginx/1.10.0 (Ubuntu)
Nginx из репозитория Установленная пакета по умолчанию со всеми расширениями, в nginx-extras
пакете.