Назад | Перейти на главную страницу

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

    }

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

Это не проблема 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 в конец имени сервера

восходящий 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;