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

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;
      }

    }

Я искал несколько часов, и ничего полезного не обнаружил, что мои потоки открыты и проблем с ними нет.

2 ответа

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

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

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

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

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

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

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

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

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

Переименуйте вышестоящий поток в up_example.com и измените

proxy_pass  http://$server_name/$uri;

быть

proxy_pass  http://up_$server_name$uri;
Другие вопросы по тегам