Puncte:2

Redirecționează NGINX către fișierul cache din subdosar

drapel ke

Am un program care creează versiuni optimizate ale imaginilor care sunt încărcate în /imagini/ folder pe serverul web. Parcurge subfoldere și în fiecare creează un .optimizat folderul care conține versiunea optimizată, dacă este cu o anumită dimensiune mai mică decât originalul. Scopul meu este să verific dacă există o astfel de versiune optimizată, să o servesc dacă există și să servesc originalul altfel (într-un anumit sens cum ar fi gzip_static servește o versiune .gz a unui fișier dacă acesta există).

Rulez NGINX ca proxy în fața Apache, așa că, deși sunt obișnuit să gestionez probleme de genul acesta folosind htaccess, încerc să o fac nativ în NGINX pentru a evita ca serverul să fie nevoit să predea cererea către Apache. În .htaccess, as putea face ceva de genul asta:

RewriteCond %{REQUEST_FILENAME} ^(/images/(?:.*/)?)(.*?)$ [SAU]
RewriteCond $1.optimized/$2 -f
RewriteRule .* $1/.optimized/$2 [L]

Există o modalitate bună de a gestiona acest lucru direct în NGINX? Cele mai multe cazuri de utilizare similare pe care le-am găsit păstrau toate fișierele din cache/optimizate într-un singur folder stocat în cache, spre deosebire de structura pe care o descriu.

djdomi avatar
drapel za
`dacă ($nume_fișier_cerere ~ "^/(.*/)+(.*?)$"){ setează $rule_0 1; } dacă (-f /${fref_0_0}/.optimized/${fref_0_1}){ setează $rule_0 1; } dacă ($regula_0 = "1"){ rescrie /.* /$1/.optimized/$2 ultimul; }` puteți testa acest lucru, dacă am citit corect solicitarea dvs., poate funcționa, altfel trebuie să folosim fișierele de încercare
Richard Smith avatar
drapel jp
Fișierele sunt sub folderul `/images/`. Începe și URI-ul cu `/images/`?
drapel ke
@djdomi Mulțumesc! Voi avea acces la serverul meu peste puțin și voi încerca.
drapel ke
@RichardSmith Da. În mod eronat, am omis asta din exemplul htaccess. Am corectat asta acum. Mulțumiri!
Puncte:3
drapel jp

Puteți folosi a expresie uzuala Locație pentru a extrage prima și a doua parte a URI-ului. Folosește o try_files afirmație pentru a căuta în sistemul de fișiere pentru fiecare fișier în ordine.

De exemplu:

locație ~ ^(/images/.*?)([^/]+)$ {
    try_files $1.optimized/$2 $1$2 =404;
}
drapel us
Cred că ordinea ar trebui să fie `try_files $1.optimized/$2 $1$2 =404`, astfel încât versiunea optimizată să fie folosită dacă există.
Richard Smith avatar
drapel jp
Hopa! Fix.Mulțumesc @TeroKilkanen
drapel ke
Mulțumesc mult! A existat o eroare în expresia regex (se presupunea că ar fi implicat cel puțin un subdirector, ceea ce nu poate fi presupus), deși chiar și atunci când trec la `^(/images/(?:.*/)?)(. *)$` nu pare să se „activeze”. incerc sa-mi dau seama de ce....
drapel ke
Oh! Mi-am dat seama că proxy_pass-ul meu împiedica difuzarea conținutului static... Va trebui să lucrez la asta, dar asta măcar explică de ce nu s-a aplicat. Multumesc din nou!

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.