ข้ามแคชเมื่อไม่ได้ตั้งค่าคุกกี้ lang
ในรูปแบบพื้นฐานที่สุด นี่คือรหัส VCL ที่คุณต้องการ ผ่าน คำขอไปยังแบ็กเอนด์ที่ไม่มี หรั่ง คุกกี้:
ย่อย vcl_recv {
if(req.http.Cookie !~ "(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+ )") {
กลับ (ผ่าน);
}
}
อย่างไรก็ตาม คุณอาจต้องกำหนดตรรกะบางอย่างในกรณีที่ หรั่ง คุกกี้ถูกตั้งค่า
โดยใช้ค่าของคุกกี้ lang
ข้อมูลโค้ด VCL ต่อไปนี้แยกภาษาที่ตั้งค่าโดย หรั่ง คุกกี้และเก็บไว้ใน req.http.lang.
ค่านี้ใช้เพื่อสร้างรูปแบบแคชสำหรับแต่ละภาษา:
ย่อย vcl_recv {
if(req.http.Cookie !~ "(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+ )") {
กลับ (ผ่าน);
}
ตั้ง req.http.lang = regsub(req.http.Cookie,"(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[ ^;]*)+)","\3");
// ตรรกะอื่น ๆ
กลับ (แฮช);
}
ย่อย vcl_hash {
ถ้า (req.http.lang) {
hash_data(req.http.lang);
}
}
ตัวอย่างด้านบนยังเรียกอย่างชัดเจน กลับ (แฮช). ในบางจุด คุณจะต้องบังคับให้วานิชแคชเมื่อ หรั่ง มีการตั้งค่าคุกกี้ เนื่องจากพฤติกรรมการเคลือบเงามาตรฐานจะแคชทุกอย่างเมื่อมีคุกกี้
ฉันเพิ่ม // ตรรกะอื่น ๆ ความคิดเห็นเพราะฉันคิดว่าจะมีตรรกะเพิ่มเติมในการข้ามแคช ตัวอย่างเช่น เมื่อร้องขอวิธีการอื่นที่ไม่ใช่ รับ และ ศีรษะ ถูกใช้ หรือสำหรับรูปแบบ URL แบบกำหนดเองที่ต้องข้ามแคช
หลีกเลี่ยงรูปแบบแคชที่มากเกินไป
เดอะ hash_data(req.http.lang) คำสั่งจะทำให้แน่ใจว่ารูปแบบแคชถูกสร้างขึ้นสำหรับทุกค่าที่ หรั่ง คุกกี้อาจมี
อันตรายคือผู้ใช้ที่มีเจตนาไม่ดีเริ่มเพิ่มค่าสุ่มให้กับ หรั่ง คุกกี้เพื่อเติมแคช
เมื่อคำนึงถึงความเสี่ยงนี้ คุณควรระบุภาษาที่รองรับอย่างชัดเจนในนิพจน์ทั่วไปของคุณ
นี่คือ regex เริ่มต้น:
(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+)
ต่อไปนี้คือตัวอย่างภาษาที่รองรับฮาร์ดโค้ด:
(^|([^;]*;)+)\s*lang=(en|es|de|it|es|fr|nl)\s*($|(;[^;]*)+)
เพียงปรับแต่ง regex นี้ให้ตรงกับความต้องการและภาษาที่แพลตฟอร์มเว็บของคุณรองรับ