Puncte:0

Nginx returnează 200 în loc de 206

drapel cn

Am o configurare a serverului Nginx (openresty) care are fișiere mari. Când un client dorește un fișier interval, Nginx trimite 200 înapoi în loc de 206.

Acesta este exemplul testului meu de bucle:

curl -v -I -r 0- -X GET http://172.29.22.11/myBigFile.bin
* Încercând 172.29.22.11:80...
* TCP_NODELAY setat
* Conectat la 172.29.22.11 (172.29.22.11) portul 80 (#0)
> GET /myBigFile.bin HTTP/1.1
> Gazdă: 172.29.22.11
> Interval: octeți=0-
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Marcați pachetul ca nu acceptă mai multe utilizări
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Transfer-Coding: fragmentat
Transfer-Codificare: fragmentat
< Conexiune: păstrați-vă în viață
Conexiune: păstrați-vă în viață
< Expiră: miercuri, 21 decembrie 2022 09:10:00 GMT
Expiră: miercuri, 21 decembrie 2022 09:10:00 GMT
< Cache-Control: max-age=31536000
Cache-Control: max-age=31536000
< Access-Control-Allow-Heaters: *
Acces-Control-Allow-Heaters: *
< Acces-Control-Permite-Origine: *
Acces-Control-Permite-Origine: *
< myCacheStatus: HIT
myCacheStatus: HIT
< Pragma: public
Pragma: public
< Cache-Control: public
Cache-Control: public
 
< 
* Exces găsit: exces = 448 url =/myBigFile.bin A (corp cu lungime zero)
* Conexiunea #0 la gazda 172.29.22.11 a rămas intactă

Cum pot defini Nginx să returneze 206 corect în acest sens?

----- Adăugarea configurației mele -----

        Locație / {
            intern;
            
            proxy_cache my_cache;
        
            proxy_cache_key $uri;

            # setați timpul de ceching pentru 200 de răspunsuri -> la 7 zile
            proxy_cache_valid 200 7d;

            # Ștergeți steagurile pe care nu le vreau
            more_clear_headers 'Acces-Control-Allow-Heaters';
            more_clear_headers „Acces-Control-Allow-Origin”;
            more_clear_headers 'acces*';
            more_clear_headers „dispoziție de conținut”;
            more_clear_headers „Data”;
            more_clear_headers 'x-proxy-cache';
            more_clear_headers 'Server';

            # adăugați anteturi pentru a gestiona CORS
            add_header Access-Control-Allow-Headers '*';
            add_header Access-Control-Allow-Origin '*';

            # pentru a reduce bandwisth folosesc compresia
            gzip on;

            # configurați proxy-ul și instruiți-l să cech, chiar dacă nu există Cache-Control
            proxy_ignore_headers X-Accel-Expires Expira Cache-Control;
            proxy_cache_lock activat;
            proxy_cache_lock_timeout 0s;
            proxy_cache_lock_age 200 de ani;
            actualizare proxy_cache_use_stale;


            # rulează proxy invers
            proxy_pass http://0.0.0.0:3000;

            # setați ceching local pe partea clientului, în prezent, vom începe la 365 de zile
            expiră 365d;
            add_header Pragma public;
            add_header Cache-Control „public”;

        }
drapel in
Aceasta ar trebui să fie setarea implicită. Vă rugăm să afișați configurația dvs.
drapel jp
Posibil duplicat https://serverfault.com/questions/965209/multipart-ranges-in-nginx-reverse-proxy
Meir avatar
drapel cn
@GeraldSchneider Am adăugat configurația
Meir avatar
drapel cn
@AlexD Răspunsurile acolo nu au fost bune (folosiți lac/nu păstrați în cache acele solicitări)
drapel in
Deci, nginx acționează doar ca un proxy invers. Asta înseamnă că problema este cel mai probabil serverul tău backend, nu nginx.
Meir avatar
drapel cn
@GeraldSchneider cum adaug nginX funcționalitatea de a returna 206 când fișierul este deja în cache? și cum pot face asta chiar dacă serverul backend nu acceptă asta?
Meir avatar
drapel cn
Mi se pare ciudat că din acest motiv trebuie să trec la lac
djdomi avatar
drapel za
este posibil să nu forțați memorarea în cache pe nginx. cu toate acestea, dacă serviciul dvs. este ascultat pe 0.0.0.0, este accesibil direct de pe internet, în mod normal utilizați 127.0.0.1 în loc de 0.0.0.0

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.