如何在Nginx上配置ETag

Han*_*uaJ 23 etag nginx browser-cache

我正在使用Nginx作为网络服务器,并希望实现一种浏览器缓存方法,以便用户在本地保存静态未更改文件的副本,并仅下载已更改的文件.其中一个建议是使用文件时间戳来找出已更改的文件并仅刷新它们,但在我的情况下这是不可能的,因为在每次新部署之后都会创建整个Web应用程序的新版本以及所有文件的时间戳更改.

我研究了一下ETag标题,它似乎是一个非常好的解决方案,但我发现Etags尚未得到Nginx的正式支持.

有没有办法在Nginx上实现Etags或任何替代解决方案?

Tan*_*Tat 33

升级您的Nginx.

Syntax:     etag on | off;
Default:    etag on;

Context:    http, server, location

This directive appeared in version 1.3.3.

Enables or disables automatic generation of the “ETag” response header field for static resources.
Run Code Online (Sandbox Code Playgroud)

来源:http://nginx.org/en/docs/http/ngx_http_core_module.html#etag

  • 谢谢,我已经尝试过,并且Etag标头被添加到HTTP标头中,但是仍然缓存验证依赖于文件的时间戳,即使我删除了Last Modified标头.我希望检查文件是否真的有内容更改,而不仅仅是验证文件的时间戳 (9认同)

Mar*_*cny 17

所有最新版本的Nginx(比1.3.3更新)都会自动设置这些.

例如:

location /img {
    root /path/to/public;
}
Run Code Online (Sandbox Code Playgroud)

并将返回响应标头Etag+ Last-Modified标头.

  • 这是我一直在寻找的答案。如果您的回答还包含指向有关此功能的 Nginx 文档/发行说明的链接,那就太好了。谢谢。 (4认同)