Tôi sử dụng nginx làm proxy ngược cho (các) ứng dụng Node.js của mình đang chạy trên localhost:3000. Cả bản thân nginx và ứng dụng của tôi đều là hai vùng chứa docker riêng biệt. (Tách ra vì sau này mình định add thêm app vào).
Trong vùng chứa ứng dụng của tôi, tôi có một số .webp
hình ảnh thay thế. Ví dụ.
$ ls
/app/assets/img/image.jpeg
/app/assets/img/image.jpeg.webp
/app/assets/img/other.jpeg
tôi đã thử sử dụng try_files
với nginx nhưng theo như tôi biết thì điều này là không thể vì try_files không "nhìn thấy" các tệp của tôi bên trong một bộ chứa docker khác trừ khi chúng chia sẻ một ổ đĩa. Mà họ không thể. Vùng chứa Ứng dụng được xây dựng ở một nơi khác với mọi thứ bên trong.
Những gì tôi có ngay bây giờ nó thế này:
ứng dụng ngược dòng {
máy chủ cục bộ:3000;
}
[…]
vị trí ~* .+\.(jpg|jpeg|svg|png)$ {
proxy_pass http://app$uri$webp_suffix;
}
[…]
địa điểm / {
proxy_pass http://ứng dụng;
}
Điều này trên thực tế đang hoạt động. khách hàng yêu cầu .jpg
hình ảnh và được .jpg.webp
(bởi vì anh ta có thể xử lý nó). Vấn đề là anh ấy luôn được .jpg.webp
. Điều tôi cần là kiểm tra xem tệp được yêu cầu có sẵn trong ứng dụng của tôi hay không.
Vì vậy, một cái gì đó tương tự như thế này có thể? Nhưng điều này không hoạt động :-(
vị trí ~* .+\.(jpg|jpeg|svg|png)$ {
nếu (-f http://app$uri$webp_suffix) {
proxy_pass http://app$uri$webp_suffix;
}
proxy_pass http://app$uri;
}