Điểm:1

NGINX SSI hoạt động tốt, nhưng LAST_MODIFIED trả về "(không có)"?

lá cờ cn

Tôi có NGINX SSI hoạt động tốt trong tệp virtualHosts (mã bên dưới) nhưng SỬA ĐỔI LẦN CUỐI đang trả về "(none)", mặc dù Tài liệu NGINX cho SSI nói rằng ssi_last_modified lệnh đã xuất hiện trong phiên bản 1.5.1 (chúng tôi đang chạy phiên bản 1.14.2).

Tệp máy chủ ảo:

â¦
  địa điểm / {
    ssi trên;
    ssi_last_modified bật;
    â¦
  }
â¦

và trong tệp .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>

Vì vậy, hiện tại, tôi đã sử dụng 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>

Tại sao lại là NGINX cung cấp chức năng SSI được ghi lại khác, nhưng không phải SỬA ĐỔI LẦN CUỐI trong tiêu đề?

Manh mối khả dĩ duy nhất mà tôi tìm thấy là sub_filter_last_modified được đề cập trong tài liệu cho NGINX ngx_http_sub_module nhưng AFAIK (và tôi không phải là chuyên gia NGINX) Tôi không chắc điều đó giúp được gì nhiều.

Điểm:4
lá cờ tz

Tại sao NGINX cung cấp chức năng SSI được ghi lại khác, nhưng không phải LAST_MODIFIED trong tiêu đề?

Bởi vì nginx vẫn chưa triển khai đầy đủ SSI. trích dẫn các tài liệu:

Hiện tại, danh sách các lệnh SSI được hỗ trợ chưa đầy đủ.

Để biết danh sách các lệnh và biến SSI được hỗ trợ, hãy kiểm tra nguồn của nginx đây.


Chỉnh sửa:

Nếu muốn hỗ trợ đầy đủ SSI, hãy thử sử dụng Apache httpd phía sau nginx.

theo tài liệu NGIX (sic) (xem liên kết trong bài đăng của tôi)

Đây là trích dẫn trực tiếp từ ssi_last_modified tài liệu khoảng ngày 21 tháng 7 năm 2021:

Cho phép bảo quản Sửa đổi lần cuối trường tiêu đề từ phản hồi ban đầu trong quá trình xử lý SSI để tạo điều kiện cho bộ nhớ đệm phản hồi.

Theo mặc định, trường tiêu đề bị xóa do nội dung của phản hồi được sửa đổi trong quá trình xử lý và có thể chứa các phần tử hoặc phần được tạo động được thay đổi độc lập với phản hồi ban đầu.

Theo mặc định, khi phản hồi yêu cầu đối với tệp tĩnh, nginx sẽ thêm Sửa đổi lần cuối Tiêu đề phản hồi HTTP.

Khi sử dụng SSI, nginx cố tình xóa tiêu đề này vì nginx đang tạo trang năng động thay vì trả về một tệp tĩnh, do đó thêm một Sửa đổi lần cuối tiêu đề phản hồi là vô nghĩa.

ssi_last_modified bổ sung lại chỉ thị Sửa đổi lần cuối Tiêu đề phản hồi HTTP theo dấu thời gian của tệp tập lệnh SSI.

Không có cách nào nó nói rằng chỉ thị này thêm SỬA ĐỔI LẦN CUỐI biến thành SSI của nginx.

SỬA ĐỔI LẦN CUỐI vẫn nên được hỗ trợ

AFAIK, không có tiêu chuẩn hay RFC nào có thể dựa vào để triển khai đầy đủ SSI. Được cho là, tài liệu vào mod_include có thể là tiêu chuẩn như vậy, nhưng một lần nữa, nó chỉ là hướng dẫn sử dụng cho một sản phẩm khác. Hãy cho tôi biết nếu có tiêu chuẩn như vậy và tôi sẽ sửa đổi câu trả lời này.

Bạn sẽ có cơ hội giải quyết vấn đề này tốt hơn bằng cách gửi yêu cầu tính năng tới Trac của nginx.

Tangent: ngay cả khi nó được hỗ trợ, nếu bạn thêm SỬA ĐỔI LẦN CUỐI, nếu giá trị của nó là dấu thời gian của tập lệnh SSI hoặc dấu thời gian của máy chủ; vì phản hồi HTML được tạo nhanh chóng thay vì đọc trực tiếp từ tệp.

Đây là dành cho các trang web cũ mà tôi đã chuyển sang NGINX từ Apache. Một số trang web lớn vẫn sử dụng SSI và đó là cách tiếp cận nhẹ nhàng hữu ích, tránh PHP, v.v.

Tôi nghi ngờ những trang web lớn đó vẫn sử dụng SSI ở hậu trường. Tại thời điểm này, SSI là một khung kế thừa với rất nhiều lựa chọn thay thế có sẵn.

Michael Hampton avatar
lá cờ cz
Đừng mong đợi nó sẽ được thêm vào. SSI là công nghệ đã chết từ lâu và tôi luôn ngạc nhiên khi thấy ai đó cố gắng sử dụng nó. Tôi cũng hơi ngạc nhiên khi Igor đã từng thêm nó vào nginx ngay từ đầu. Nó đã chết ngay cả hồi đó.
mforsetti avatar
lá cờ tz
Tôi nghĩ rằng SSI đã có vị trí của nó trong quá khứ, đặc biệt là vì SSI đủ đơn giản để sử dụng và CGI không hoạt động tốt ngay từ đầu (chúng ta đang nói về thời điểm trước năm 2000 ở đây); mặc dù các cấp độ hiện tại của sức mạnh tính toán và động lực học có thể được cung cấp bởi *GI (CGI, FastCGI, WSGI, v.v.) đã đóng chiếc đinh cuối cùng vào quan tài cho SSI.
lá cờ cn
Mặc dù nó có thể không được triển khai đầy đủ như trong Apache, nhưng theo các tài liệu NGIX (xem liên kết trong bài đăng của tôi) LAST_MODIFIED vẫn nên được hỗ trợ, đó là câu hỏi của tôi. Đây là dành cho các trang web cũ mà tôi đã chuyển sang NGINX từ Apache. Một số trang web lớn vẫn sử dụng SSI và đó là cách tiếp cận nhẹ nhàng hữu ích, tránh PHP, v.v.
mforsetti avatar
lá cờ tz
@DaveEveritt Tôi đã chỉnh sửa câu trả lời của mình và thêm một vài chi tiết
Michael Hampton avatar
lá cờ cz
@DaveEveritt Bạn đã đọc sai tài liệu. Tùy chọn này kiểm soát tiêu đề phản hồi Sửa đổi lần cuối, không phải bất kỳ chỉ thị SSI nào. Đối với SSI, nó phải cực kỳ nhẹ vì đó là tất cả những gì 486 hoặc Pentium có thể xử lý và vẫn quản lý để phục vụ một trang web trong một khoảng thời gian hợp lý (trong những năm 1990). Bạn phải có một số trang web "kế thừa" đáng kinh ngạc.
lá cờ cn
Cảm ơn bạn đã làm rõ. Với Apache, LAST_MODIFIED đã cung cấp ngày tệp chứa SSI được cập nhật lần cuối hoặc ngày tệp được bao gồm được cập nhật, đó là những gì tôi hiện đang nhận được với JavaScript, vì vậy tôi sẽ tiếp tục sử dụng JS để thay thế.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.