2016-11-17 8 views
0

Привет У меня есть следующая довольно простая конфигурация для балансировки нагрузки/сбой: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 пакете.

ответ

1

У меня была такая же проблема, как и вы, я нашел ответ на this website here.

Upstream имя можно увидеть в $ upstream_addr переменной, если Nginx не смог выбрать вышестоящий сервер для подключения к, потому что все серверы были вниз, как на max_fails/fail_timeout.В то же время ошибка «нет в прямом эфире» регистрируется в журнале ошибок.

Надеюсь, это может вам помочь.

 Смежные вопросы

  • Нет связанных вопросов^_^