Ai grijă de mine, acesta este unul lung.
La început, am creat un server Nginx pe serverul de fișiere statice pentru compania mea și a funcționat excelent cu următorul fragment de configurare pentru servirea fișierelor:
Server {
# o grămadă de lucruri ssl
rădăcină /cale/la/fișiere;
Locație / {
include cors_support;
sendfile activat;
sendfile_max_chunk 1m;
try_files $uri =404;
}
Simplu, curat și funcțional. Până când m-am gândit că voi adăuga o altă funcție acestui server: stocarea versiunilor noastre de aplicații și furnizarea lor echipei noastre de QA. Deoarece fișierele aplicației pot fi destul de mari, am adăugat un alt volum de stocare doar pentru versiuni și m-am gândit că aș putea scăpa de asta cu o simplă modificare a configurației Nginx, după cum urmează (se arată doar porțiunile relevante):
Server {
# în mare parte la fel
root /new/path/to/builds;
Locație / {
#la fel ca inainte
try_files $uri @cdn_files;
}
locație @cdn_files {
# unele setări cors și send_file
rădăcină /cale/la/fișiere;
try_files $uri =404;
}
}
Ce mă așteptam să se întâmple conform documentației:
- cererea vine pentru un dosar
- verifică primul bloc pentru fișier
- fișier găsit? da=trimite fișierul nu=redirecționează către locația numită
- locație numită -> fișier găsit? da=trimite fisierul nr=404 pagina
Ce se întâmplă de fapt:
- cererea vine pentru un dosar
- verifică primul bloc pentru fișier
- fișier găsit? da=trimite fisierul nr=404 pagina
Am încercat mai multe încercări diferite de a remedia acest lucru, inclusiv câteva încercări nebunești de „bună mare”.
Aceasta produce același rezultat (pagina 404):
# ... cod irelevant
rădăcină /;
Locație / {
# ... mai mult cod irelevant
try_files /new/path/to/builds/$uri /path/to/files/$uri =404;
}
Aceasta produce același rezultat (pagina 404):
#...
root /new/path/to/builds;
Locație / {
#...
try_files $uri @cdn_files;
}
locație @cdn_files {
#...
rădăcină /cale/la/fișiere;
try_files $uri =403; #rețineți că pagina livrată este 404 și NU 403
}
Acest lucru produce și un 404:
# Am eliminat directiva „rădăcină” din blocul serverului pentru acest test
Locație / {
#...
root /new/path/to/builds;
try_files $uri ../realitve/path/to/files/$uri =404;
}
Alte câteva lucruri de reținut:
- Jurnalele de erori arată doar o încercare de a localiza fișierul la primul parametru al
try_files
directivă.
- Dacă fișierul există în primul parametru al
try_files
directivă dosarul este livrat
- Nu cred că este relativ, dar pentru orice eventualitate: sistemul de operare este Ubuntu 16.04
Editați | ×: