Điểm:0

NGINX: try_files với proxy_pass trong vùng chứa docker

lá cờ cn

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;
}
lá cờ jp
Chỉ cần sao chép nội dung vào hình ảnh `nginx`.
Điểm:1
lá cờ us

Bạn không thể thực hiện kiểm tra từ xa như vậy trong nginx. Và ngay cả khi bạn có thể, nó sẽ chậm vì nginx sẽ cần thực hiện hai yêu cầu để phục vụ một tệp.

Giải pháp ưa thích là sao chép/chia sẻ nội dung đến nơi nginx có thể truy cập chúng.

Một giải pháp khác là triển khai logic trong ứng dụng của bạn, kiểm tra phần mở rộng tệp và phân phát tệp tương ứng. Sau đó, một cách đơn giản proxy_pass là đủ trong nginx giao diện người dùng.

Tùy chọn thứ ba là bao gồm cả nginx trong vùng chứa ứng dụng. Trong trường hợp này một cách đơn giản proxy_pass có thể được sử dụng trong nginx mặt trước.

YeppThat'sMe avatar
lá cờ cn
Được rồi, đó là những gì tôi nghĩ tbh. Nhưng cảm ơn bạn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.