Folosesc nginx ca proxy invers pentru aplicațiile mele Node.js care rulează pe localhost:3000. Atât nginx în sine, cât și aplicația mea sunt două containere docker separate. (Separați pentru că mai târziu intenționez să adaug mai multe aplicații la el.)
În containerul meu de aplicații am câteva .webp
imagini alternative. De exemplu.
$ ls
/app/assets/img/image.jpeg
/app/assets/img/image.jpeg.webp
/app/assets/img/other.jpeg
Am încercat să folosesc try_files
cu nginx, dar din câte știu, acest lucru nu este posibil, deoarece try_files nu „vede” fișierele mele într-un alt container docker decât dacă partajează un volum. Pe care ei nu pot. Containerul pentru aplicații este construit în altă parte, cu totul în interior.
Ce am acum este asta:
aplicație în amonte {
server localhost:3000;
}
[...]
locație ~* .+\.(jpg|jpeg|svg|png)$ {
proxy_pass http://app$uri$webp_sufx;
}
[...]
Locație / {
proxy_pass http://app;
}
Acest lucru funcționează de fapt. Clientul cere .jpg
imagine şi primeşte .jpg.webp
(pentru că se poate descurca). Problema este el mereu devine .jpg.webp
. Ceea ce am nevoie este să verific dacă fișierul solicitat este disponibil în aplicația mea.
Deci ceva asemanator poate? Dar asta nu merge :-(
locație ~* .+\.(jpg|jpeg|svg|png)$ {
dacă (-f http://app$uri$webp_sufx) {
proxy_pass http://app$uri$webp_sufx;
}
proxy_pass http://app$uri;
}