Puncte:1

NGINX SSI funcționează bine, dar LAST_MODIFIED returnează „(niciunul)”?

drapel cn

Am NGINX SSI care funcționează bine în fișierul virtualHosts (codul de mai jos), dar MODIFICAT ULTIMA DATĂ returnează „(niciunul)”, deși Documente NGINX pentru SSI afirmă că ssi_last_modified directiva a apărut în versiunea 1.5.1 (rulăm versiunea 1.14.2).

Fișier VirtualHost:

â¦
  Locație / {
    ssi on;
    ssi_last_modified on;
    â¦
  }
â¦

și în fișierul .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>

Deci, deocamdată, am apelat la 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>

De ce este NGINX oferă alte funcționalități SSI documentate, dar nu MODIFICAT ULTIMA DATĂ în antet?

Singurul indiciu posibil pe care l-am găsit a fost că sub_filtru_ultima_modificată este menționat în documente pentru NGINX ngx_http_sub_module dar AFAIK (și nu sunt specialist NGINX) nu sunt sigur că ajută prea mult.

Puncte:4
drapel tz

De ce NGINX oferă alte funcționalități SSI documentate, dar nu LAST_MODIFIED în antet?

Pentru că oricum nginx nu a implementat complet SSI. Citând documentele:

În prezent, lista comenzilor SSI acceptate este incompletă.

Pentru o listă de comenzi și variabile SSI acceptate, verificați sursa nginx Aici.


Editați | ×:

Dacă se dorește suport SSI complet, încercați să utilizați Apache httpd în spatele nginx.

conform documentelor NGIX (sic) (vezi linkul din postarea mea)

Iată citatul direct din ssi_last_modified docs circa 21 iulie 2021:

Permite conservarea Modificat ultima dată câmp antet din răspunsul original în timpul procesării SSI pentru a facilita stocarea în cache a răspunsului.

În mod implicit, câmpul antet este eliminat deoarece conținutul răspunsului este modificat în timpul procesării și poate conține elemente sau părți generate dinamic, care sunt modificate independent de răspunsul original.

În mod implicit, atunci când răspunde la o solicitare pentru un fișier static, nginx adaugă Modificat ultima dată Antet de răspuns HTTP.

Când utilizați SSI, nginx elimină acest antet intenționat, deoarece nginx generează pagina dinamic în loc să returneze un fișier static, prin urmare adăugarea unui Modificat ultima dată antetul răspunsului este inutil.

ssi_last_modified directiva re-adaugă Modificat ultima dată Antetul răspunsului HTTP în conformitate cu marcajul temporal al fișierului script SSI.

În niciun caz nu a spus că această directivă adaugă MODIFICAT ULTIMA DATĂ variabilă la SSI al lui nginx.

MODIFICAT ULTIMA DATĂ ar trebui să fie susținute în continuare

AFAIK, nu există nici un standard, nici RFC-uri, pe care să se poată baza pentru a implementa complet SSI. Discutabil, docs la mod_include ar putea fi un astfel de standard, dar din nou, este doar un manual pentru alt produs. Anunțați-mă dacă există un astfel de standard și voi modifica acest răspuns.

Veți avea mai multe șanse să rezolvați această problemă trimițând o solicitare de funcție către Trac al lui nginx.

Tangenta: chiar daca este suportata, daca adaugi MODIFICAT ULTIMA DATĂ, în cazul în care valoarea sa este marcajul de timp al scriptului SSI sau marcajul de timp al serverului; deoarece răspunsul HTML este generat din mers în loc să fie citit direct dintr-un fișier.

Acesta este pentru site-urile vechi pe care le-am mutat în NGINX de la Apache. Unele site-uri mari încă folosesc SSI și este o abordare utilă, evitând PHP etc.

Mă îndoiesc că acele site-uri mari încă mai folosesc SSI în culise. În acest moment, SSI este un cadru moștenit cu o mulțime de alternative disponibile.

Michael Hampton avatar
drapel cz
Nici nu vă așteptați să fie adăugat. SSI este o tehnologie demult și sunt întotdeauna surprins când văd pe cineva care încearcă să o folosească. Am fost, de asemenea, puțin surprins că Igor l-a adăugat vreodată la nginx la început. Era mort chiar și pe atunci.
mforsetti avatar
drapel tz
Cred că SSI și-a avut locul în trecut, mai ales că SSI este destul de simplu de utilizat, iar CGI nu a funcționat bine în primul rând (vorbim despre pre-2000 aici); deși nivelurile actuale de putere de calcul și dinamică care pot fi furnizate de *GI-uri (CGI, FastCGI, WSGI, etc) au pus unghiul final în sicriu pentru SSI.
drapel cn
Deși s-ar putea să nu fie atât de complet implementat ca în Apache, conform documentelor NGIX (vezi linkul din postarea mea) LAST_MODIFIED ar trebui să fie în continuare acceptat, care este întrebarea mea. Acesta este pentru site-urile vechi pe care le-am mutat în NGINX de la Apache. Unele site-uri mari încă folosesc SSI și este o abordare utilă, evitând PHP etc.
mforsetti avatar
drapel tz
@DaveEveritt Mi-am editat răspunsul și am adăugat câteva detalii
Michael Hampton avatar
drapel cz
@DaveEveritt Ai citit greșit documentele. Această opțiune controlează antetul de răspuns Ultima modificare, nu orice directivă SSI. În ceea ce privește SSI, a trebuit să fie extrem de ușor, deoarece asta este tot ce putea să se descurce un 486 sau un Pentium și să reușească totuși să servească o pagină web într-un timp rezonabil (pentru anii 1990). Trebuie să aveți niște site-uri incredibil de „moștenite”.
drapel cn
Multumesc pentru clarificare. Cu Apache, LAST_MODIFIED a dat fie data la care fișierul care conține SSI a fost actualizat ultima dată, fie data la care un fișier inclus a fost actualizat, ceea ce primesc acum cu JavaScript, așa că voi continua să folosesc JS în schimb.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.