Folosesc load balancer Alibaba Cloud SLB de mai bine de 5 ani și îl folosesc încă de la beta internă inițială Alibaba Cloud, iar după implementare, a apărut următoarea eroare:
Erorile apar intermitent, după pornirea inițială, nu apare nicio eroare gateway 502, iar după un minut de așteptare, apare eroarea, containerul Windows Server IIS ASP.NET site-ul backend.
Apasă pe IIS de pe server pentru a deschide browserul, poți naviga normal, probleme indirecte de echilibrare a încărcării SLB, este prima dată când mă confrunt cu asta.
Soluție:
Problema apare în principal în setările "Health Check Method", setările implicite fiind următoarele:
Verificarea stării de sănătate backend este solicitată în headway, iar dacă codul de stare corespunzător returnează 2xx sau 3xx, serverul backend este considerat normal.
Am încercat să facem o cerere de antet în trei moduri: mai întâi, am rulat direct proiectul local și l-am testat local.
Test 1:
Folosește testul poștașului așa cum este prezentat mai jos:
Revenind la starea 404 Not Found, de fapt, aici știm ce a cauzat-o.
Test 2:
Folosește testarea curl, așa cum se arată mai jos:
C:\Users\itsvse>curl -i -X HEAD http://localhost:60155/
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the
Warning: way you want. Consider using -I/--head instead. HTTP/1.1 404 Negăsit
Cache-Control: private
Content-Length: 4432
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/10.0
X-SourceFiles: =?UTF-8?B?QzpccHJvamVjdFxteVxDb2RlU2hhcmluZ1xDb2RlU2hhcmluZy5XZWJVSVxIb21lXEVycm9yNDA0?=
X-Powered-By: ASP.NET
Date: Tue, 13 Aug 2019 03:53:04 GMT
curl: (56) Recv failure: Connection was reset
De asemenea, este returnat un cod de stare 404.
Testul 3:
De data aceasta, am testat direct pe serverul oficial, prin testul de curl sub PowerShell, așa cum se vede în figura de mai jos:
Poți vedea că aceeași pagină este solicitată prin cap,Uneori se întoarce404cod de status, uneori returnat200Cod de stare, confirmând astfel erorile intermitente 502 pe care le-am întâlnit la început.
Ce cauzează asp.net returnează intermitent codurile de status 404 și 200?
Deoarece pagina noastră principală are cache, când utilizatorul folosește metoda get pentru a solicita pagina principală, pagina va fi stocată cu succes în cache, iar apoi head-ul și get vor returna întotdeauna pagina cache-uită, și vor returna și codul de răspuns 200; dacă, după expirarea cache-ului, niciun utilizator nu face o cerere get method, ci doar cererea metodei head prin comandă, va apărea o eroare 404. Se estimează că puțini oameni se vor confrunta cu astfel de probleme.
Soluția este verificarea tuturor codurilor de stare a răspunsului în modul de verificare a sănătății, așa cum se arată în figura de mai jos:
Cum să depanezi anomaliile verificării de sănătate la Ascultarea de Nivel 7 (HTTP/HTTPS):Autentificarea cu hyperlink este vizibilă.
(Sfârșit)
|