Puncte:0

try_files aparent caută în director greșit

drapel hu

Încerc să configurez try_files, dar întâmpin o problemă: se pare că fișierul alternativ „empty.png” nu este preluat, chiar dacă se află la /path/to/old_cache_data/empty.png. Fișierele care există efectiv (adică fără rezervă) sunt găsite fără probleme. De asemenea, destul de interesant, nu primesc un nginx 404, ci pagina 404 din aplicația care este gestionată de proxy_pass de mai jos.

Lucruri pe care le-am încercat până acum:

  • Eliminarea barei oblice principale, care duce la această eroare curioasă: open() „/usr//htmlempty.png” a eșuat (2: Nu există un astfel de fișier sau director), Mi se pare ciudat deoarece /usr/html nu este specificat nicăieri ca nici un fel de cale de rezervă.
  • Specificarea unei căi absolute (de ex. try_files $uri /path/to/old_cache_data/empty.png;)

Reguli relevante:

# cache static moștenit
locație /cache/ {
    root /path/to/old_cache_data;
    try_files $uri /empty.png;
}

# A trece prin
Locație / {
    [o mulțime de setări proxy]
    proxy_pass [url-ul țintă];
}

Deci, nu sunt sigur unde exact "țin greșit". Se pare ca try_files nu ridică pe rădăcină în locație, dar face cumva o alternativă ciudată.

EDITAȚI | ×: am aflat că plasând empty.png în subdosarul „cache” și schimbând try_files în try_files $uri /cache/empty.png; chiar functioneaza. Nu înțeleg totuși de ce este așa.

Puncte:1
drapel gr

După cum a afirmat de către documentație, ultimul parametru al try_files directivă poate fi

  • un nou URI;
  • Cod de eroare HTTP: =cod;
  • ID locație numită: @numele locatiei.

Folosesti /empty.png care este tratat ca un nou URI care nu cade sub locație /cache { ... } fiind astfel deservite de către Locație / { ... }. Când eliminați bara oblică principală, obțineți noul URI gol.png acea nu se încadrează în niciuna dintre locațiile dvs., inclusiv Locație / { ... }. Fiecare Server blocul are o cale rădăcină implicită prefix/html unde prefixul este specificat la timpul de compilare și poate fi verificat cu nginx -V comanda (se pare că a ta este /usr/). Așa cum a spus de către rădăcină directivă documentație,

O cale către fișier este construită prin simpla adăugare a unui URI la valoarea lui rădăcină directivă.

care ne dă prefix /usr/ + rădăcină implicită /html + URI gol.png = /usr//htmlempty.png.

Când te schimbi ultima dată try_files parametru la /cache/empty.png, acest URI este servit cu același locație /cache { ... } blocați cu fișierul /path/to/old_cache_data + /cache/empty.png = /path/to/old_cache_data/cache/empty.png. Și dacă înțelegeți corect toate informațiile de mai sus, ar trebui să observați că, cu configurația dvs., nu puteți accesa niciun fișier din fișierul /path/to/old_cache_data folder, cu excepția celor din /path/to/old_cache_data/cache subfolder. Verificați diferența dintre rădăcină și alias directive pentru o mai bună înțelegere.

drapel hu
Aaaah, de fapt, are foarte mult sens. Da, am înțeles greșit că este pur și simplu un fișier și nu m-am gândit la el ca doar o altă adresă URL care este reevaluată. Mulțumesc mult :)

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.