Score:1

NGINX SSI ทำงานได้ดี แต่ LAST_MODIFIED ส่งคืน "(ไม่มี)"

ธง cn

ฉันมี NGINX SSI ทำงานได้ดีในไฟล์ virtualHosts (รหัสด้านล่าง) แต่ LAST_MODIFIED กำลังกลับมา "(ไม่มี)" แม้ว่า เอกสาร NGINX สำหรับ SSI ระบุว่า ssi_last_modified คำสั่งปรากฏในเวอร์ชัน 1.5.1 (เรากำลังเรียกใช้เวอร์ชัน 1.14.2)

ไฟล์ VirtualHost:

¦
  ที่ตั้ง / {
    ssi บน;
    ssi_last_modified บน;
    ¦
  }
¦

และในไฟล์ .html:

<!--#if expr="$footer_id='blackfooter'" --><div id="blackfooter"><!--#else --><div id="footer"><!--#endif -->
    <!--#config timefmt="%A %d %B %Y" --><p>Updated: <!--#echo var="LAST_MODIFIED" --> | Today: <!--#echo var="DATE_LOCAL" --></p>
</div>

ตอนนี้ฉันได้หันไปใช้ JavaScript:

<!--#if expr="$footer_id='blackfooter'" --><footer id="blackfooter"><!--#else --><footer><!--#endif -->
    <!--#config timefmt="%A %d %B %Y" --><p>Updated: <span id="updated"></span> | Today: <!--#echo var="DATE_LOCAL" --></p>
</footer>
<script>
    let lastmod = new Date(document.lastModified);
    updated.innerHTML = lastmod.toString().substring(4,15);
</script>

ทำไม NGINX มอบฟังก์ชัน SSI อื่นๆ ที่มีเอกสารกำกับไว้, แต่ ไม่ LAST_MODIFIED ในส่วนหัว?

เงื่อนงำเดียวที่เป็นไปได้ที่ฉันพบก็คือ sub_filter_last_modified ถูกกล่าวถึงใน เอกสารสำหรับ NGINX ngx_http_sub_module แต่ AFAIK (และฉันไม่ใช่ผู้เชี่ยวชาญ NGINX) ฉันไม่แน่ใจว่าจะช่วยได้มาก

Score:4
ธง tz

เหตุใด 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 เป็นกรอบเดิมที่มีทางเลือกมากมาย

Michael Hampton avatar
cz flag
อย่าหวังว่าจะได้รับการเพิ่มเช่นกัน SSI เป็นเทคโนโลยีที่เลิกใช้งานไปนานแล้ว และฉันรู้สึกประหลาดใจเสมอเมื่อเห็นมีคนพยายามใช้มัน ฉันรู้สึกประหลาดใจเล็กน้อยที่ Igor เคยเพิ่มลงใน nginx ตั้งแต่เริ่มต้น มันตายไปแล้วด้วยซ้ำ
mforsetti avatar
tz flag
ฉันคิดว่า SSI มีที่มาแทนที่ในอดีต โดยเฉพาะอย่างยิ่งเนื่องจาก SSI นั้นใช้งานง่ายพอ และ CGI ทำงานได้ไม่ดีตั้งแต่แรก (เรากำลังพูดถึงก่อนปี 2000 ที่นี่); แม้ว่าระดับพลังการประมวลผลและไดนามิกในปัจจุบันที่สามารถส่งมอบโดย *GIs (CGI, FastCGI, WSGI ฯลฯ) ได้ทำให้ SSI เป็นเล็บสุดท้าย
cn flag
แม้ว่ามันอาจจะไม่ได้ใช้งานอย่างสมบูรณ์เหมือนใน Apache แต่ตามเอกสาร NGIX (ดูลิงก์ในโพสต์ของฉัน) LAST_MODIFIED ควรได้รับการสนับสนุนซึ่งเป็นคำถามของฉัน นี่สำหรับไซต์ดั้งเดิมที่ฉันได้ย้ายจาก Apache ไปยัง NGINX ไซต์ขนาดใหญ่บางแห่งยังคงใช้ SSI และเป็นวิธีที่มีประโยชน์เล็กน้อย โดยหลีกเลี่ยง PHP เป็นต้น
mforsetti avatar
tz flag
@DaveEveritt ฉันได้แก้ไขคำตอบและเพิ่มรายละเอียดเล็กน้อย
Michael Hampton avatar
cz flag
@DaveEveritt คุณอ่านเอกสารผิด ตัวเลือกนี้ควบคุมส่วนหัวการตอบสนองที่แก้ไขล่าสุด ไม่ใช่คำสั่ง SSI ใดๆ สำหรับ SSI นั้นต้องมีน้ำหนักเบามากเพราะนั่นคือทั้งหมดที่ 486 หรือ Pentium สามารถจัดการได้และยังคงจัดการเพื่อให้บริการหน้าเว็บในระยะเวลาที่เหมาะสม (สำหรับปี 1990) คุณต้องมีไซต์ "ดั้งเดิม" ที่เหลือเชื่อ
cn flag
ขอขอบคุณสำหรับการชี้แจง. เมื่อใช้ Apache LAST_MODIFIED จะระบุวันที่ที่ไฟล์ที่มี SSI ได้รับการอัปเดตครั้งล่าสุด หรือวันที่ที่ไฟล์รวมได้รับการอัปเดต ซึ่งเป็นสิ่งที่ฉันได้รับจาก JavaScript ดังนั้นฉันจะใช้ JS ต่อไปแทน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา