ฉันใช้ nginx เป็น reverse proxy สำหรับแอปพลิเคชัน Node.js ซึ่งทำงานบน localhost:3000 ทั้ง nginx เองและแอปพลิเคชันของฉันเป็นคอนเทนเนอร์นักเทียบท่าสองคอนเทนเนอร์แยกกัน (แยกไว้เพราะคราวหลังจะลงแอพเพิ่มค่ะ)
ในคอนเทนเนอร์แอปของฉันฉันมีบางอย่าง .webp
ภาพทางเลือก เช่น.
$ ล
/app/assets/img/image.jpeg
/app/assets/img/image.jpeg.webp
/app/assets/img/other.jpeg
ฉันได้ลองใช้ try_files
ด้วย nginx แต่เท่าที่ฉันรู้นี่เป็นไปไม่ได้เพราะ try_files ไม่ "เห็น" ไฟล์ของฉันในคอนเทนเนอร์นักเทียบท่าอื่นเว้นแต่ว่าพวกเขาจะแชร์วอลุ่ม ซึ่งพวกเขาลาดเท คอนเทนเนอร์ของแอปสร้างขึ้นที่อื่นโดยมีทุกอย่างอยู่ภายใน
สิ่งที่ฉันมีอยู่ตอนนี้คือ:
แอปอัปสตรีม {
เซิร์ฟเวอร์ localhost:3000;
}
[...]
ตำแหน่ง ~* .+\.(jpg|jpeg|svg|png)$ {
proxy_pass http://app$uri$webp_suffix;
}
[...]
ที่ตั้ง / {
proxy_pass http://app;
}
นี่คือการทำงานจริง ลูกค้าร้องขอ .jpg
ภาพและได้รับ .jpg.webp
(เพราะเขาสามารถจัดการได้). ปัญหาคือเขา เสมอ ได้รับ .jpg.webp
. สิ่งที่ฉันต้องการคือการตรวจสอบว่ามีไฟล์ที่ร้องขอในแอพของฉันหรือไม่
ดังนั้นสิ่งที่คล้ายกันนี้อาจจะ? แต่มันไม่ทำงาน :-(
ตำแหน่ง ~* .+\.(jpg|jpeg|svg|png)$ {
ถ้า (-f http://app$uri$webp_suffix) {
proxy_pass http://app$uri$webp_suffix;
}
proxy_pass http://app$uri;
}