AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1069897
Accepted
Dave Everitt
Dave Everitt
Asked: 2021-07-18 03:41:59 +0800 CST2021-07-18 03:41:59 +0800 CST 2021-07-18 03:41:59 +0800 CST

NGINX SSI 工作正常,但 LAST_MODIFIED 返回“(无)”?

  • 772

我的 NGINX SSI 在 vi​​rtualHosts 文件(下面的代码)中工作正常,但LAST_MODIFIED返回“(无)”,尽管SSI 的 NGINX 文档声明该ssi_last_modified指令出现在版本 1.5.1 中(我们正在运行版本 1.14.2)。

虚拟主机文件:

…
  location / {
    ssi on;
    ssi_last_modified on;
    …
  }
…

并在 .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标头中?

我发现的唯一可能的线索是NGINX ngx_http_sub_modulesub_filter_last_modified的文档中提到了AFAIK(而且我不是 NGINX 专家)我不确定这有多大帮助。

nginx server-side-includes last-modified
  • 1 1 个回答
  • 151 Views

1 个回答

  • Voted
  1. Best Answer
    mforsetti
    2021-07-21T09:35:49+08:002021-07-21T09:35:49+08:00

    为什么 NGINX 提供了其他记录在案的 SSI 功能,但没有在标头中提供 LAST_MODIFIED?

    因为 nginx 还没有完全实现 SSI。引用文档:

    目前,支持的 SSI 命令列表不完整。

    有关支持的 SSI 命令和变量的列表,请在此处查看 nginx 的源代码。


    编辑:

    如果需要完整的 SSI 支持,请尝试在 nginx 后面使用 Apache httpd。

    根据 NGIX(原文如此)文档(请参阅我帖子中的链接)

    这是大约 2021 年 7 月 21 日从ssi_last_modified文档中直接引用的内容:

    允许在 SSI 处理期间保留Last-Modified原始响应的标头字段,以促进响应缓存。

    默认情况下,当响应的内容在处理过程中被修改时,标头字段会被删除,并且可能包含动态生成的元素或部分,这些元素或部分会独立于原始响应而更改。

    默认情况下,当响应一个静态文件的请求时,nginx 会添加Last-ModifiedHTTP 响应头。

    使用 SSI 时,nginx 故意删除这个 header,因为 nginx 是动态生成页面而不是返回静态文件,因此添加Last-Modified响应 header 是没有意义的。

    ssi_last_modifiedLast-Modified指令根据 SSI 脚本文件时间戳重新添加HTTP 响应标头。

    绝不是说该指令将LAST_MODIFIED变量添加到 nginx 的 SSI。

    LAST_MODIFIED还是应该支持的

    AFAIK,没有标准,也没有 RFC,可以依靠它来完全实现 SSI。可以说,mod_include 的文档可能是这样的标准,但同样,它只是另一个产品的手册。让我知道是否有这样的标准,我会修改这个答案。

    通过向nginx 的 Trac提交功能请求,您将有更好的机会解决此问题。

    Tangent:即使支持,如果加上LAST_MODIFIED,它的值应该是SSI脚本的时间戳,还是服务器时间戳;因为 HTML 响应是即时生成的,而不是直接从文件中读取。

    这适用于我从 Apache 迁移到 NGINX 的遗留站点。一些大型网站仍然使用 SSI,这是一种有用的轻量级方法,避免了 PHP 等。

    我怀疑那些大型网站仍然在幕后使用 SSI。在这一点上,SSI 是一个遗留框架,有很多可用的替代方案。

    • 4

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve