เหตุใด NGINX จึงส่งฟังก์ชัน SSI ที่มีเอกสารอื่นๆ แต่ไม่มี LAST_MODIFIED ในส่วนหัว
เนื่องจาก nginx ยังไม่ได้ใช้ SSI อย่างสมบูรณ์ อ้าง เอกสาร:
ขณะนี้ รายการคำสั่ง SSI ที่รองรับยังไม่สมบูรณ์
สำหรับรายการคำสั่งและตัวแปร SSI ที่รองรับ ให้ตรวจสอบแหล่งที่มาของ nginx ที่นี่.
แก้ไข:
หากต้องการการสนับสนุน SSI อย่างสมบูรณ์ ให้ลองใช้ Apache httpd ที่อยู่เบื้องหลัง nginx
ตามเอกสาร NGIX (sic) (ดูลิงก์ในโพสต์ของฉัน)
นี่คือคำพูดโดยตรงจาก ssi_last_modified
เอกสาร ประมาณวันที่ 21 กรกฎาคม 2021:
อนุญาตให้รักษา แก้ไขล่าสุด
ฟิลด์ส่วนหัวจากการตอบสนองดั้งเดิมระหว่างการประมวลผล SSI เพื่ออำนวยความสะดวกในการแคชการตอบสนอง
ตามค่าเริ่มต้น ฟิลด์ส่วนหัวจะถูกลบออกเนื่องจากเนื้อหาของการตอบสนองถูกแก้ไขระหว่างการประมวลผล และอาจมีองค์ประกอบหรือส่วนที่สร้างขึ้นแบบไดนามิกที่เปลี่ยนแปลงโดยไม่ขึ้นกับการตอบสนองดั้งเดิม
ตามค่าเริ่มต้น เมื่อตอบกลับคำขอสำหรับไฟล์สแตติก nginx จะเพิ่ม แก้ไขล่าสุด
ส่วนหัวการตอบสนอง HTTP
เมื่อใช้ SSI nginx จะลบส่วนหัวนี้โดยตั้งใจเนื่องจาก nginx กำลังสร้างเพจ แบบไดนามิก แทนที่จะส่งคืนไฟล์แบบสแตติก ดังนั้นจึงเพิ่มไฟล์ แก้ไขล่าสุด
ส่วนหัวการตอบสนองไม่มีจุดหมาย
ssi_last_modified
เพิ่มคำสั่งอีกครั้ง แก้ไขล่าสุด
ส่วนหัวการตอบสนอง HTTP ตามการประทับเวลาของไฟล์สคริปต์ SSI
ไม่มีทางที่จะบอกว่าคำสั่งนี้เพิ่ม LAST_MODIFIED
ตัวแปรเป็น SSI ของ nginx
LAST_MODIFIED
ยังไงก็ต้องสนับสนุน
AFAIK ไม่มีมาตรฐานหรือ RFC ที่สามารถพึ่งพาได้เพื่อใช้ SSI อย่างสมบูรณ์ เป็นที่ถกเถียงได้, เอกสารเป็น mod_include อาจเป็นมาตรฐานดังกล่าว แต่อีกครั้ง เป็นเพียงคู่มือสำหรับผลิตภัณฑ์อื่นเท่านั้น แจ้งให้เราทราบหากมีมาตรฐานดังกล่าว และฉันจะแก้ไขคำตอบนี้
คุณจะมีโอกาสแก้ไขปัญหานี้ได้ดีขึ้นโดยส่งคำขอคุณสมบัติไปที่ Trac ของ nginx.
Tangent: แม้ว่าจะรองรับ แต่ถ้าคุณเพิ่ม LAST_MODIFIED
ค่าควรเป็นเวลาประทับของสคริปต์ SSI หรือการประทับเวลาของเซิร์ฟเวอร์ เนื่องจากการตอบสนอง HTML ถูกสร้างขึ้นทันทีแทนที่จะอ่านโดยตรงจากไฟล์
นี่เป็นไซต์ดั้งเดิมที่ฉันได้ย้ายจาก Apache ไปยัง NGINX ไซต์ขนาดใหญ่บางแห่งยังคงใช้ SSI และเป็นวิธีที่มีประโยชน์เล็กน้อย หลีกเลี่ยง PHP เป็นต้น
ฉันสงสัยว่าไซต์ขนาดใหญ่เหล่านั้นยังคงใช้ SSI อยู่เบื้องหลัง ณ จุดนี้ SSI เป็นกรอบเดิมที่มีทางเลือกมากมาย