Miklix

การลบแคช 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 จะรับสิ่งนี้และดึงสําเนาใหม่จากส่วนหลังของคุณโดยไม่มีปัญหา อย่างไรก็ตามหากคุณทําเช่นนี้โดยไม่ปรับแต่งการกําหนดค่าของคุณมีแนวโน้มที่จะเห็นข้อความทั้งหมดที่คล้ายกับข้อความนี้ในบันทึกข้อผิดพลาดของคุณหลังจากนั้นไม่นาน:

2015/03/04 17:35:24 [crit] 16665#0: unlink() \"/path/to/nginx/cache/9/a0/53eb903773998c16dcc570e6daebda09\" failed (2: No such file or directory)

ดูเหมือนว่าข้อผิดพลาดเหล่านี้เกิดขึ้นเมื่อ NGINX พยายามลบรายการแคชหลังจากเวลาที่ระบุโดยพารามิเตอร์ inactive ของคําสั่ง fastcgi_cache_path ค่าเริ่มต้นสําหรับสิ่งนี้คือ 10 นาที แต่คุณสามารถตั้งค่าเป็นค่าใดก็ได้ที่คุณต้องการ หากคุณตั้งค่าเป็น 10 ปี อาจไม่น่าเป็นไปได้ที่คุณยังไม่ได้รีสตาร์ทเซิร์ฟเวอร์ในระหว่างนี้ ดังนั้นดัชนีคีย์ในหน่วยความจําจะถูกล้างในระหว่างนี้ หากคุณทําเช่นนี้คุณต้อง แน่ใจว่าคุณ ล้างแคชด้วยตัวเอง NGINX จะไม่ทําให้คุณอีกต่อไป

ฉันพบว่ามันแปลกมากที่ถือว่าเป็นข้อผิดพลาด ร้ายแรง ที่ไม่สามารถลบรายการแคชได้เพราะไม่มีอยู่จริง ความจริงที่ว่าการจําแนกประเภทความรุนแรงนั้นสูงมากหมายความว่าเป็นไปไม่ได้ที่จะกําจัดเพียงแค่เพิกเฉยต่อรายการบันทึกที่ต่ํากว่าเกณฑ์ที่กําหนด ทันทีที่มีการดึงสําเนาใหม่จากส่วนหลังรายการจะมีอยู่อีกครั้งดังนั้นนี่ควรเป็นคําเตือนมากที่สุดในความคิดของฉัน

ตอนนี้หากไม่สามารถลบรายการแคชได้เนื่องจากปัญหาเกี่ยวกับการอนุญาตหรือสิ่งที่ สามนั่นจะเป็น ข้อผิดพลาดร้ายแรงเพราะอาจทําให้ NGINX ยังคงให้บริการเนื้อหาที่แคชไว้ต่อไปนานหลังจากเวลาหมดอายุ แต่กระบวนการล้างข้อมูลดูเหมือนจะไม่สร้างความแตกต่างนี้

แชร์บนบลูสกายแชร์บนเฟสบุ๊คแชร์บน LinkedInแชร์บน Tumblrแชร์บน Xแชร์บน LinkedInปักหมุดบน Pinterest

มิคเคล บัง คริสเตนเซ่น

เกี่ยวกับผู้เขียน

มิคเคล บัง คริสเตนเซ่น
ไมเคิล คือผู้สร้างและเจ้าของเว็บไซต์ miklix.com เขามีประสบการณ์เป็นโปรแกรมเมอร์/นักพัฒนาซอฟต์แวร์คอมพิวเตอร์มืออาชีพมากว่า 20 ปี และปัจจุบันทำงานเต็มเวลาให้กับบริษัทไอทีขนาดใหญ่แห่งหนึ่งในยุโรป เมื่อไม่ได้เขียนบล็อก เขาจะใช้เวลาว่างไปกับความสนใจ งานอดิเรก และกิจกรรมต่างๆ มากมาย ซึ่งในระดับหนึ่งอาจสะท้อนให้เห็นได้จากหัวข้อต่างๆ มากมายที่กล่าวถึงในเว็บไซต์นี้