Puncte:0

Cum se configurează HAProxy să ignore antetul clientului „Pragma: no-cache”?

drapel ve

Avem un serviciu web în spatele unui server HAProxy care rulează stocarea în cache proxy invers configurație. Serverele backend trimit Cache-Control antetele corect pentru toate răspunsurile, astfel încât HAProxy să poată stoca în cache toate răspunsurile conform specificațiilor HTTP.

Cu toate acestea, atunci când utilizatorul final apasă butonul Shift+Reîncărcare de ex. Google Chrome, clientul (Chrome) trimite Pragma: fără cache și Cache-Control: fără cache ceea ce obligă HAProxy să preia întotdeauna cererea de la serverul backend. Evident, atacurile DDoS pot folosi același truc pentru a provoca cu ușurință mai multă încărcare pe serverele backend.

Deoarece știm că anteturile cache-ului sunt corecte, cum putem configura HAProxy să ignore clientul trimis Pragma: fără cache și evitați apelarea backend-ului atunci când solicitarea ar putea fi îndeplinită direct din memoria cache HAProxy?

Știu că ignorarea acestui antet nu ar fi în regulă pentru o utilizare proxy generică, dar în acest caz controlăm atât proxy-ul invers, cât și backend-ul, așa că știm că este bine.

Iată un exemplu de răspuns de la serverul backend care va fi reluat de la backend atunci când clientul trimite cache-control: fără cache și pragma: fără cache:

cache-control: public, max-age=31536000, s-maxage=31536000
lungimea conținutului: 463
tip de conținut: imagine/svg+xml
data: joi, 24 iunie 2021 14:14:19 GMT
etag: "338"
expiră: vineri, 24 iunie 2022 14:14:19 GMT
server: Apache
x-content-type-options: nosniff

Este evident intru totul inutil să preluăm din nou acest lucru de la serverele backend, deoarece este valabil timp de un an pentru orice utilizator care folosește adresa URL dată. De asemenea, merită remarcat faptul că NGINX nu onorează antetul Pragma [client] în mod implicit.

drapel ve
În realitate, avem mai multe interfețe redundante care rulează în paralel și mai multe backend-uri redundante, dar chiar nu schimbă nimic în legătură cu problema. Așa că am scris întrebarea simplificată de mai sus ca și cum ar fi fost doar un server frontend și un server backend.
drapel ve
https://www.haproxy.com/documentation/aloha/latest/traffic-management/lb-layer7/caching-small-objects/ spune că „*Obiectele sunt stocate în cache numai dacă toate următoarele sunt adevărate: [...] Răspunsul nu are un antet „Cache-Control: no-cache”*”, ceea ce sugerează că acesta nu este configurabil în prezent. Din punct de vedere tehnic, este vorba despre componenta Aloha, dar cred că ar putea fi aplicabilă și întregului HAProxy.

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.