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.
Odpowiedzi:
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
top
na 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:
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ń.
źródło
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; }
źródło
Zmień nazwę strumienia na „up_example.com” i zmień
być
źródło
$server_name
. Gdyby to był problem, myślę, że miałby problemy / cały czas, nie tylko czasami, jak to zgłoszono.