nginx: нет прямых трансляций при подключении к апстримам


15

502 ошибка плохого шлюза, отображаемая при переключении между страницами сайта и несколько раз на домашней странице, но не для первого запроса на домашней странице, а только при перенаправлении на другую страницу. и это происходит для некоторых файлов JavaScript

балансировка нагрузки настроена на двух восходящих потоках php1 и php2 оба являются серверами apache.

Когда я проверил журнал ошибок, я полюбил:

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"

и это конфигурация сервера балансировки нагрузки

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass  http://$server_name/$uri;
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
      }

    }

Я искал часы и ничего полезного не нашел мои потоки и никаких проблем с ними.


Работают ли ваши вышестоящие серверы (php01, php02)? Не могли бы вы телнет с машины ngnix к ним?
нейтринус

Они связаны.
Мохаммед Джолани

Вы проверили, что на вышестоящих серверах запущено достаточно процессов для обработки трафика? Вам следует проверить журналы вышестоящих серверов, если они по какой-то причине отклоняют запросы.
Теро Килканен,

Я сделал и не было никаких проблем с каким-либо вышестоящим журналом ошибок и журналом доступа для плохих запросов шлюза.
Мохаммад Джолани

Вы нашли решение этой проблемы?
мерцание

Ответы:


4

Это не проблема с Nginx, это проблема с тем, что ваши PHP-серверы не отвечают вовремя. Вы можете добавить логирование в Nginx, чтобы подтвердить это .

Как вторая точка отсчета, вы можете topна сервере и вручную проверить, не PHP ли хлопает процессором в течение некоторого времени, еще один индикатор медленных ответов.

Если очень медленные ответы от PHP в порядке, вы можете попросить Nginx подождать дольше, прежде чем сдаться:

 # Wait 5 minutes before giving up on the backend!
 proxy_read_timeout 5m; 

Изучив журналы с информацией о времени, указанной выше, вы сможете выяснить, какие запросы медленны для обработки PHP.

Чтобы сузить проблему, отправьте эти запросы непосредственно в бэкэнд PHP.

В зависимости от того, что происходит, вы также можете включить кэширование некоторых запросов в Nginx, избегая некоторых медленных запросов.


0

Не знаю, если это то же самое, но для меня сработало добавление max_fails = 0 в конец имени сервера

upstream sm_url {сервер LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }


-3

Переименуйте апстрим в up_example.com и измените

proxy_pass  http://$server_name/$uri;

быть

proxy_pass  http://up_$server_name$uri;

Хотя нетрадиционные, я не вижу никаких технических проблем с использованием $server_name. Если бы это была проблема, я думаю, что у него были бы проблемы / постоянно / не всегда, как сообщалось.
Марк Стосберг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.