การลบแคช NGINX ทําให้ข้อผิดพลาดการยกเลิกการเชื่อมโยงที่สําคัญในบันทึกข้อผิดพลาด
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 11 นาฬิกา 25 นาที 10 วินาที UTC
บทความนี้อธิบายวิธีลบรายการออกจากแคชของ NGINX โดยไม่ให้ไฟล์บันทึกของคุณรกด้วยข้อความแสดงข้อผิดพลาด แม้ว่าจะไม่ใช่แนวทางที่แนะนําโดยทั่วไป แต่ก็อาจเป็นประโยชน์ในบางกรณี
Deleting NGINX Cache Puts Critical Unlink Errors in Error Log
ข้อมูลในโพสต์นี้อ้างอิงจากการแคช FastCGI บน NGINX 1.4.6 ที่ทํางานบน Ubuntu Server 14.04 x64 อาจใช้ได้หรือไม่ถูกต้องสําหรับเวอร์ชันอื่น
(อัปเดต 2025: ในช่วงเวลาระหว่างที่ฉันเขียนโพสต์ต้นฉบับและตอนนี้ เซิร์ฟเวอร์เร็วกว่าและถูกกว่า ดังนั้นฉันจึงไม่แนะนําวิธีการที่อธิบายไว้ในโพสต์นี้ที่ฉันพยายามจัดการการหมดอายุของแคชเพียงเพื่อบันทึกเนื้อหาแบบไดนามิกเพิ่มเติมสองสามรุ่น ฉันจะทิ้งเนื้อหาไว้ที่นี่เพื่อใช้อ้างอิงในอนาคตและในกรณีที่มีคนต้องการมันจริงๆไม่ว่าด้วยเหตุผลใดก็ตาม ฉันยังไม่ได้ยืนยันว่าสิ่งนี้ยังคงใช้ได้กับ NGINX เวอร์ชันปัจจุบัน แต่ฉันคิดว่ามันทําได้)
หลังจากย้ายไซต์หลายไซต์จาก Apache ไปยัง NGINX ฉันก็ชอบความสามารถในการแคชในตัวมากซึ่งทํางานได้ดีมากภายใต้สถานการณ์ส่วนใหญ่โดยไม่ต้องเข้าไปยุ่งเกี่ยวกับฉันมากนัก
อย่างไรก็ตามสําหรับไซต์ใดไซต์หนึ่งฉันต้องการความสามารถในการล้างแคช (ทั้งทั้งหมดและลบแต่ละรายการ) ด้วยตัวเอง NGINX รุ่นชุมชนฟรีรองรับเฉพาะการหมดอายุแคชตามเวลา (เช่น คุณสามารถตั้งค่าเพื่อตรวจสอบว่ามีการเปลี่ยนแปลงหลังจากผ่านไปหนึ่งชั่วโมง หนึ่งวัน ฯลฯ) แต่ถ้าไม่มีวิธีที่เชื่อถือได้ในการระบุล่วงหน้าว่าทรัพยากรบางอย่างจะเปลี่ยนแปลงเมื่อใด ตัวอย่างเช่นฉันไม่รู้ว่ามันจะใช้เวลาหนึ่งชั่วโมงหนึ่งวันหรือหนึ่งปีก่อนที่ฉันจะกลับมาแก้ไขบางสิ่งบางอย่างในโพสต์นี้และทําไมถึงแคชเพียงหนึ่งชั่วโมงหากการแคชเป็นเวลาหนึ่งวันก็ใช้ได้
นี่คือจุดที่จําเป็นต้องใช้ความสามารถในการล้างแคชด้วยตนเอง (หรือโดยให้เว็บแอปพลิเคชันของคุณแจ้ง NGINX ว่าควรล้างบางสิ่งบางอย่าง) ผู้ที่อยู่เบื้องหลัง NGINX ตระหนักดีถึงความจําเป็นในเรื่องนี้เนื่องจากคุณลักษณะนี้ได้รับการสนับสนุนในเวอร์ชันที่ต้องชําระเงินของผลิตภัณฑ์ของพวกเขา แต่ในขณะที่พวกเขามีสิทธิ์ตั้งค่าใบอนุญาตในแบบที่พวกเขาต้องการ แต่ราคาก็ค่อนข้างสูงชันสําหรับฉันเมื่อฟังก์ชันนี้เป็นคุณสมบัติแบบชําระเงินเพียงอย่างเดียวที่ฉันต้องการจริงๆ
โชคดีที่ปรากฎว่าคุณสามารถลบไฟล์ออกจากไดเร็กทอรีแคชได้ด้วยตัวเอง และ NGINX จะรับสิ่งนี้และดึงสําเนาใหม่จากส่วนหลังของคุณโดยไม่มีปัญหา อย่างไรก็ตามหากคุณทําเช่นนี้โดยไม่ปรับแต่งการกําหนดค่าของคุณมีแนวโน้มที่จะเห็นข้อความทั้งหมดที่คล้ายกับข้อความนี้ในบันทึกข้อผิดพลาดของคุณหลังจากนั้นไม่นาน:
ดูเหมือนว่าข้อผิดพลาดเหล่านี้เกิดขึ้นเมื่อ NGINX พยายามลบรายการแคชหลังจากเวลาที่ระบุโดยพารามิเตอร์ inactive ของคําสั่ง fastcgi_cache_path ค่าเริ่มต้นสําหรับสิ่งนี้คือ 10 นาที แต่คุณสามารถตั้งค่าเป็นค่าใดก็ได้ที่คุณต้องการ หากคุณตั้งค่าเป็น 10 ปี อาจไม่น่าเป็นไปได้ที่คุณยังไม่ได้รีสตาร์ทเซิร์ฟเวอร์ในระหว่างนี้ ดังนั้นดัชนีคีย์ในหน่วยความจําจะถูกล้างในระหว่างนี้ หากคุณทําเช่นนี้คุณต้อง แน่ใจว่าคุณ ล้างแคชด้วยตัวเอง NGINX จะไม่ทําให้คุณอีกต่อไป
ฉันพบว่ามันแปลกมากที่ถือว่าเป็นข้อผิดพลาด ร้ายแรง ที่ไม่สามารถลบรายการแคชได้เพราะไม่มีอยู่จริง ความจริงที่ว่าการจําแนกประเภทความรุนแรงนั้นสูงมากหมายความว่าเป็นไปไม่ได้ที่จะกําจัดเพียงแค่เพิกเฉยต่อรายการบันทึกที่ต่ํากว่าเกณฑ์ที่กําหนด ทันทีที่มีการดึงสําเนาใหม่จากส่วนหลังรายการจะมีอยู่อีกครั้งดังนั้นนี่ควรเป็นคําเตือนมากที่สุดในความคิดของฉัน
ตอนนี้หากไม่สามารถลบรายการแคชได้เนื่องจากปัญหาเกี่ยวกับการอนุญาตหรือสิ่งที่ สามนั่นจะเป็น ข้อผิดพลาดร้ายแรงเพราะอาจทําให้ NGINX ยังคงให้บริการเนื้อหาที่แคชไว้ต่อไปนานหลังจากเวลาหมดอายุ แต่กระบวนการล้างข้อมูลดูเหมือนจะไม่สร้างความแตกต่างนี้