nginx: brak transmisji strumieniowych na żywo podczas łączenia z transmisją


15

502 błąd nieprawidłowej bramy wyświetlany podczas przełączania między stronami witryny i czasami na stronie głównej, ale nie w przypadku pierwszego żądania na stronie głównej, tylko wtedy, gdy przekierowuje do niej inna strona. i dzieje się tak w przypadku niektórych plików javascript

równoważenie obciążenia skonfigurowane na dwóch strumieniach pośrednich php1 php2 oba są serwerami Apache.

Kiedy sprawdziłem dziennik błędów, lubię:

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/"

i to jest konfiguracja serwera równoważenia obciążenia

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

    }

Szukałem godzinami i nic pomocnego nie znalazło moich strumieni i nie ma z nimi problemów.


Czy twoje serwery nadrzędne (php01, php02) działają? Czy możesz telnet z maszyny ngnix do nich?
neutrinus

Są połączone.
Mohammad Jolani

Czy sprawdziłeś, czy serwery nadrzędne mają wystarczającą liczbę procesów do obsługi ruchu? Powinieneś sprawdzić dzienniki serwera nadrzędnego, jeśli z jakiegoś powodu odrzucają żądania.
Tero Kilkanen

Zrobiłem to i nie ma problemu z jakimkolwiek dziennikiem błędów wysyłania i brakiem dziennika dostępu dla złych żądań bramy.
Mohammad Jolani

Czy znalazłeś rozwiązanie tego problemu?
flickerfly

Odpowiedzi:


4

To nie jest problem z Nginxem, to problem z twoimi backendami PHP nie reagującymi na czas. Możesz dodać rejestrowanie do Nginx, aby to potwierdzić .

Drugim punktem odniesienia jest to, że możesz topna serwerze i ręcznie sprawdzić, czy PHP blokuje procesor przez pewien czas, co jest kolejnym wskaźnikiem powolnych odpowiedzi.

Jeśli bardzo powolne odpowiedzi z PHP są w porządku, możesz poprosić Nginx, aby poczekał dłużej, zanim się poddasz:

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

Analizując dzienniki z informacjami o czasie powiązanymi z powyższymi, powinieneś być w stanie dowiedzieć się, które żądania są wolne dla PHP do przetworzenia.

Aby zawęzić problem, wyślij te żądania bezpośrednio do zaplecza PHP.

W zależności od tego, co się dzieje, możesz również włączyć buforowanie niektórych żądań w Nginx, unikając niektórych powolnych żądań.


0

Nie wiem, czy jest dokładnie tak samo, ale dla mnie zadziałało dodanie max_fails = 0 na końcu nazwy serwera

upstream sm_url {serwer LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }


-3

Zmień nazwę strumienia na „up_example.com” i zmień

proxy_pass  http://$server_name/$uri;

być

proxy_pass  http://up_$server_name$uri;

Choć niekonwencjonalny, nie widzę problemu technicznego z użyciem $server_name. Gdyby to był problem, myślę, że miałby problemy / cały czas, nie tylko czasami, jak to zgłoszono.
Mark Stosberg,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.