Puncte:3

Nginx nu servește întotdeauna js și css la echilibrarea încărcăturii între containerele docker - funcționează la reîmprospătare

drapel us

Am Nginx configurat ca echilibrare a încărcăturii proxy inversă între două containere docker care rulează toate pe același server. Când încarc o pagină pentru prima dată, pagina se încarcă, dar primesc o mulțime de erori 404 pentru toate fișierele css și js:

404 erori de la încărcarea paginii

Când se reîmprospătează sau se deschide o a doua filă, toate aceste erori dispar și pagina se încarcă bine. Când reduc acest lucru la un singur recipient, funcționează în mod similar.

Inițial am crezut că acest lucru se datorează faptului că js și css au fost solicitate de la aceeași adresă URL rădăcină și un aspect al echilibratorilor de încărcare și al containerelor producea erori, deoarece un grup de cereri pentru un singur utilizator erau echilibrate între cele două servere. Am încercat să folosesc printr-un mic experiment proxy_set_header Gazdă $gazdă (in cautarea Aici și Aici pentru răspunsuri) - înțelegerea mea ar fi că aceasta ar trebui să trimită cererile ulterioare ale unui singur utilizator către același server din amonte. Acest lucru părea să facă problema să apară mai rar, dar nu a eliminat-o în totalitate.

Întrebările mele rămase (de la un amator de învățare!):

  • Este aceasta utilizarea corectă a proxy_set_header, și este astfel posibil să se servească js/css de pe același server din amonte către un singur utilizator, mai degrabă decât echilibrarea sarcinii acestor solicitări relativ minore pe două servere?
  • Este aceasta rădăcina probabilă a problemei, că, având în vedere că al doilea container trebuie să răspundă la unele dintre solicitările solicitate de încărcarea paginii pentru primul container, aceste răspunsuri nu sunt cumva aliniate?
  • Baza mea de utilizatori ar fi 100-200 de utilizatori care accesează simultan o adresă URL la distanță dintr-o singură locație. nu cred ip_hash ar funcționa atunci, deoarece toate solicitările ar proveni de la același IP? Există alte modalități de a lega mai eficient un singur utilizator de un singur server?

Fișierul meu de configurare nginx:

backend în amonte {
        minimum_conn;
        server localhost:4000;
        server localhost:4001;
}

Server {
        asculta 80;
        asculta [::]:80;

        nume_server xxxxxxxxxx;

        Locație / {
                proxy_pass http://backend;
                proxy_redirect http://backend/ $scheme://$gazdă/;
                proxy_http_versiunea 1.1;
                proxy_set_header Actualizare $http_upgrade;
                proxy_set_header Gazdă $gazdă;
                proxy_set_header Conexiune $connection_upgrade;
                proxy_read_timeout 20d;
                proxy_buffering dezactivat;
        }
}
drapel ru
Uitați-vă la jurnalele pentru nginx. Se pare că 404 nu este răspunsul nginx, ci răspunsul backend.
Andy Baxter avatar
drapel us
Multumesc pentru asta. Da, pare să fie că cererea este trimisă bine în amonte, dar serverul containerului docker este greșit cu răspunsul său. Am încercat acum `ip_hash` pentru a adăuga persistență fiecărui server și, testând de la două IP-uri, primesc răspunsuri perfecte de la ambele. Se pare că atunci când un dispozitiv trimite secvențial interogări ambilor, apar probleme.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.