Score:2

NGINX เปลี่ยนเส้นทางไปยังไฟล์แคชในโฟลเดอร์ย่อย

ธง ke

ฉันมีโปรแกรมที่สร้างรูปภาพเวอร์ชันที่ปรับให้เหมาะสมซึ่งอัปโหลดไปยัง /ภาพ/ โฟลเดอร์บนเว็บเซิร์ฟเวอร์ มันสำรวจโฟลเดอร์ย่อยและในแต่ละโฟลเดอร์ สร้าง .เพิ่มประสิทธิภาพ โฟลเดอร์ที่เก็บเวอร์ชันที่ปรับให้เหมาะสม ถ้า มันมีขนาดเล็กกว่าต้นฉบับอย่างน้อยหนึ่งขนาด เป้าหมายของฉันคือการตรวจสอบว่ามีเวอร์ชันที่ปรับให้เหมาะสมหรือไม่ ให้บริการหากมี และให้บริการต้นฉบับเป็นอย่างอื่น (ในบางแง่ เช่น gzip_static ให้บริการไฟล์เวอร์ชัน .gz หากมีอยู่)

ฉันใช้ NGINX เป็นพร็อกซีต่อหน้า Apache ดังนั้นในขณะที่ฉันเคยชินกับการจัดการปัญหาเช่นนี้โดยใช้ htaccess ฉันพยายามทำแบบเนทีฟใน NGINX เพื่อหลีกเลี่ยงเซิร์ฟเวอร์ที่ต้องส่งคำขอไปยัง Apache ใน .htaccessฉันสามารถทำสิ่งนี้:

RewriteCond %{REQUEST_FILENAME} ^(/images/(?:.*/)?)(.*?)$ [หรือ]
RewriteCond $1.optimized/$2 -f
RewriteRule .* $1/.optimized/$2 [L]

มีวิธีที่ดีในการจัดการสิ่งนี้โดยตรงใน NGINX หรือไม่ กรณีการใช้งานที่คล้ายกันส่วนใหญ่ที่ฉันพบจะเก็บไฟล์แคช/ไฟล์ที่ปรับให้เหมาะสมทั้งหมดไว้ในโฟลเดอร์แคชเดียว ซึ่งตรงข้ามกับโครงสร้างที่ฉันกำลังอธิบาย

djdomi avatar
za flag
`ถ้า ($request_filename ~ "^/(.*/)+(.*?)$"){ ตั้ง $rule_0 1; } ถ้า (-f /${fref_0_0}/.optimized/${fref_0_1}){ ตั้ง $rule_0 1; } ถ้า ($rule_0 = "1"){ เขียนใหม่ /.* /$1/.optimized/$2 ล่าสุด; }` คุณช่วยทดสอบสิ่งนี้ได้ไหม ถ้าฉันอ่านคำขอของคุณถูกต้อง อาจใช้การได้ มิฉะนั้นเราต้องใช้ไฟล์ลอง
Richard Smith avatar
jp flag
ไฟล์อยู่ใต้โฟลเดอร์ `/images/` URI ขึ้นต้นด้วย `/images/` ด้วยหรือไม่
ke flag
@djdomi ขอบคุณ! ฉันจะเข้าถึงเซิร์ฟเวอร์ของฉันได้ในอีกไม่ช้าและจะลองดู
ke flag
@RichardSmith ใช่ ฉันทิ้งสิ่งนั้นไว้ในตัวอย่าง htaccess อย่างผิดพลาด ตอนนี้ฉันแก้ไขแล้ว ขอบคุณ!
Score:3
ธง jp

คุณสามารถใช้ นิพจน์ทั่วไป ที่ตั้ง เพื่อแยกส่วนแรกและส่วนที่สองของ URI ใช้ try_files คำแถลง เพื่อค้นหาระบบไฟล์สำหรับแต่ละไฟล์ตามลำดับ

ตัวอย่างเช่น:

สถานที่ ~ ^(/images/.*?)([^/]+)$ {
    try_files $1.optimized/$2 $1$2 =404;
}
us flag
ฉันคิดว่าคำสั่งควรเป็น `try_files $1.optimized/$2 $1$2 =404` เพื่อให้ใช้เวอร์ชันที่ปรับให้เหมาะสมหากมีอยู่
Richard Smith avatar
jp flag
อ๊ะ. แก้ไขแล้ว.ขอบคุณ @TeroKilkanen
ke flag
ขอบคุณมาก! มีข้อผิดพลาดใน regex ของฉัน (สันนิษฐานว่ามีอย่างน้อยหนึ่งไดเรกทอรีย่อยที่เกี่ยวข้อง ซึ่งไม่สามารถสันนิษฐานได้) แม้ว่าฉันจะเปลี่ยนเป็น `^(/images/(?:.*/)?)(. *)$` ดูเหมือนจะไม่ "เปิดใช้งาน" ฉันพยายามหาสาเหตุว่าทำไม....
ke flag
โอ้! ฉันตระหนักว่า proxy_pass ของฉันกำลังขัดขวางการให้บริการเนื้อหาแบบสแตติก... ฉันจะต้องดำเนินการแก้ไข แต่อย่างน้อยก็อธิบายได้ว่าทำไมจึงใช้ไม่ได้ ขอบคุณอีกครั้ง!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา