วิธีการตั้งค่าแคช Amazon CloudFront อย่างถูกต้อง

ฉันใช้ S3 เพื่อจัดเก็บรูปภาพจำนวนมาก และใช้ CloudFront เพื่อแคชรูปภาพเหล่านั้น ปัญหาที่ฉันได้รับคือรูปภาพของฉันไม่ได้ถูกแคชอย่างถูกต้อง

หากฉันตรวจสอบส่วนหัวของรูปภาพผ่านลิงก์ CloudFront รูปภาพนั้นจะแสดง MISS ในการลองครั้งแรกและ HIT สำหรับความพยายามครั้งต่อไปทั้งหมด นี่เป็นเรื่องปกติ แต่หากฉันปิดเบราว์เซอร์ ให้ออกไปสองสามชั่วโมงแล้วลองอีกครั้ง มันจะแสดงข้อความ MISS แสดงว่ามันถูกแคชเพียงช่วงเวลาสั้นๆ เท่านั้น

นี่คือภาพตัวอย่างบน cdn: http://d711ds9nsj32q.cloudfront.net/static/8e1f8567e229e24e0782ed_1e994b9dc56ba092ecd2_5.jpg

พฤติกรรมแปลกๆ ก็คือ หากคุณพยายามดมส่วนหัวด้วย web-sniffer.net คุณจะเห็นข้อความ MISS ทุกครั้ง แม้ว่าการควบคุมแคชจะเป็น public, max-age=315360000 และจะถูกตั้งค่าให้หมดอายุหลังจากผ่านไป 10 ปี

วิธีที่เหมาะสมในการแคชบางสิ่งเป็นเวลา 10 ปีบนคลาวด์ฟรอนท์คืออะไร? มีส่วนหัวเพิ่มเติมใด ๆ ที่ฉันขาดหายไปหรือไม่?

แก้ไข: สำหรับการเปรียบเทียบ รูปภาพเดียวกันบน imgur พวกเขาใช้ cloudflare แต่พฤติกรรมที่ฉันเห็นนั้นถูกต้อง เมื่อแคชแล้ว ฉันจะไม่เห็นการพลาดจากคอมพิวเตอร์เครื่องใด ๆ ของฉันหรือสถานที่ใกล้เคียงอีกเลย ทั้งส่วนหัวของฉันและส่วนหัวมีความคล้ายคลึงกัน ยกเว้นความแตกต่างเล็กน้อย (ไม่สำคัญ) ความช่วยเหลือใด ๆ ที่ชื่นชม


person steve    schedule 29.01.2014    source แหล่งที่มา


คำตอบ (1)


อาจเป็นไปได้ว่าคุณได้ตั้งค่า TTL ขั้นต่ำเป็นสิ่งที่ไม่ใช่ค่าเริ่มต้น และกำลังแคชไว้ในช่วงเวลานั้น แทนที่จะเป็นอะไรก็ตามที่อยู่ในส่วนหัว Cache-Control ของคุณ ฉันคิดว่าไม่น่าเป็นไปได้ทั้งคู่เพราะคุณอาจคิดเรื่องนี้แล้วและเนื่องจากดูเหมือนว่าการแจกจ่ายนั้นเคารพ Cache-Control: no-cache (และจะไม่เกิดขึ้นหาก TTL ขั้นต่ำไม่ใช่ค่าเริ่มต้น)

มีแนวโน้มมากขึ้นว่า cloudfront เป็นเพียงการถอดรายการของคุณออกหลังจากผ่านไประยะหนึ่ง:

หากไม่มีการร้องขอออบเจ็กต์ในตำแหน่ง Edge บ่อยครั้ง CloudFront อาจไล่ออบเจ็กต์ออก—ลบออบเจ็กต์ออกก่อนวันหมดอายุ—เพื่อให้มีที่ว่างสำหรับออบเจ็กต์ที่ได้รับความนิยมมากกว่า

- จากบทความนี้

สำหรับ web-sniffer.net คุณจะสังเกตเห็นว่ามันส่งส่วนหัว Cache-Control: no-cache ซึ่งจะทำให้การดึงข้อมูล cloudfront จากจุดเริ่มต้น

person Alex Guerra    schedule 30.01.2014
comment
ขอบคุณสำหรับความช่วยเหลือ ฉันไม่คิดว่าการขับไล่จะเกิดขึ้นเนื่องจากฉันกำลังทดสอบกับไฟล์ที่ค่อนข้างใหม่ ดูเหมือนว่า CF จะต้องรออย่างน้อยสักระยะ (เดือน?) ก่อนที่จะทำอะไรแบบนั้น นอกจากนี้: หากคุณลอง รูปภาพนี้ จาก Squre บน web-sniffer คุณจะเห็นว่ามันฮิตทุกครั้ง ดูเหมือนว่าส่วนหัวของฉันและส่วนหัวจะคล้ายกัน และทั้งคู่อยู่บน CloudFront - person steve; 30.01.2014
comment
คุณพูดถูก ฉันกำลังลองใช้กับไฟล์ของตัวเองที่ให้บริการผ่าน cf และกำลังได้รับความนิยม คุณช่วยโพสต์ URL ของวัตถุต้นทางได้ไหม - person Alex Guerra; 30.01.2014
comment
อเล็กซ์ นี่คือ URL แหล่งที่มา ฉันสามารถให้ข้อมูลเพิ่มเติมแก่คุณได้หากต้องการ เมื่อฉันอัพโหลดไฟล์ ฉันจะตั้งค่า 'Cache-Control' และ 'Expires' เป็น 10 ปี ขอบคุณ. - person steve; 30.01.2014
comment
ฉันตั้งค่าการแจกจ่ายเริ่มต้นอื่นต่อหน้าที่ฝากข้อมูลของคุณและจัดการให้ web-sniffer.net แสดงการเข้าชมแคชทุกครั้ง (หลังจากพลาดสองครั้ง) สิ่งนี้ทำให้ฉันสงสัยว่าสิ่งที่เกิดขึ้นเกิดขึ้นเนื่องจากการตั้งค่าการแจกจ่ายของคุณ คุณมีอะไรที่ไม่ใช่ค่าเริ่มต้นในการกำหนดค่าของคุณหรือไม่? - person Alex Guerra; 31.01.2014
comment
น่าสนใจมาก. ฉันไม่ได้ทำอะไรนอกเหนือค่าเริ่มต้น ฉันสามารถตั้งค่าอื่นต่อไปได้ ฉันจะปล่อยให้ทุกอย่างเป็นค่าเริ่มต้นและโพสต์ไว้ที่นี่ - person steve; 31.01.2014
comment
ดังนั้นฉันจึงสร้างการเผยแพร่ ใหม่ และยังคงพลาดใน web-sniffer.net . ฉันสงสัยว่าปัญหาจะเป็นอย่างไร - person steve; 31.01.2014
comment
ฮึ ฉันเปิดใช้งานการแจกจ่ายนั้นอีกครั้ง และตอนนี้ฉันไม่สามารถให้ web-sniffer แสดงรายการแคชได้อีกเช่นกัน! ขออภัยที่ไม่สามารถช่วยได้มากกว่านี้ มันทำให้ฉันนิ่งงัน - person Alex Guerra; 31.01.2014
comment
ไม่มีปัญหา ฉันได้ซื้อแผนการสนับสนุนแล้ว ดังนั้นฉันจะพยายามแก้ไขปัญหาร่วมกับพวกเขาตอนนี้ ขอบคุณมาก. ฉันจะยอมรับคำตอบของคุณ - person steve; 31.01.2014