在Nginx中配置前端HTTP缓存,可以通过设置HTTP响应头来实现。这些响应头会告诉浏览器如何缓存资源,以及缓存的有效期。以下是一些关键的HTTP响应头和如何在Nginx配置文件中设置它们的示例。
1. 配置expires
指令
expires
指令用于设置资源的过期时间。它可以是具体的时间(如1d
表示一天),也可以是相对于请求时间的偏移量(如modified + 1d
表示资源最后修改时间后的一天)。
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 设置这些资源30天后过期
}
在这个例子中,所有匹配指定文件扩展名的请求都会得到一个Expires
响应头,指示浏览器缓存这些资源30天。
2. 配置add_header
指令
虽然expires
指令已经足够用于大多数缓存场景,但有时候你可能需要更细粒度的控制,比如设置Cache-Control
和ETag
响应头。
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform"; # 设置缓存控制策略
# 可以根据需要添加其他Cache-Control选项,如max-age=2592000(30天秒数)
# add_header Cache-Control "public, max-age=2592000, no-transform";
# 如果需要,可以设置ETag来验证资源是否改变
# etag on; # 这实际上不是add_header指令,但可以在此上下文中提及
# 但是,Nginx默认使用文件的inode, size和mtime来计算ETag,所以通常不需要显式开启
}
请注意,etag on;
并不是一个有效的Nginx指令。Nginx默认会根据文件的inode、大小和修改时间来生成ETag。如果你需要自定义ETag的生成方式,可能需要编写更复杂的逻辑或使用第三方模块。
3. 清除缓存
有时候,你可能需要清除浏览器缓存以立即应用更改。这通常通过更改资源的URL(例如添加版本号)或设置较短的expires
时间并等待其自然过期来实现。
4. 综合考虑
在配置缓存时,要综合考虑多个因素,包括资源的更新频率、客户端(浏览器)的行为以及服务器的负载。过于积极的缓存策略可能会导致用户无法及时看到更新,而过于保守的策略则可能增加服务器的负载。
5. 示例配置
以下是一个完整的Nginx配置示例,结合了上述内容:
server {
listen 80;
server_name example.com;
location / {
# 其他配置...
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
# 如果需要,可以添加其他响应头,如Content-Type等
}
# 其他location块...
}
请确保在修改Nginx配置文件后重新加载或重启Nginx以使更改生效。你可以使用nginx -t
命令来测试配置文件的语法是否正确,然后使用nginx -s reload
命令来重新加载配置。
暂无评论内容