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)? Не могли б ви їм telnet від ngnix machine до них?
нейтрин

Вони пов'язані між собою.
Мохаммед Джолані

Ви перевірили, чи є на серверах вище за течією достатньо запущених процесів для обробки трафіку? Ви повинні перевірити журнали верхнього сервера, якщо вони з якоїсь причини відхиляють запити.
Tero Kilkanen

Я не мав жодних проблем із журналом помилок у верхній течії та жодним журналом доступу для поганих запитів на шлюз.
Мохаммед Йолані

Ви знайшли рішення цієї проблеми?
мерехтіння

Відповіді:


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.