对于特定的 URL,我想为静态资产(例如/images/*
、/js/*
等)设置缓存控制标头,以告知浏览器使用本地缓存(例如 30 天),而不是获取新版本。我如何通过 haproxy 配置实现此目的?
在被误解之前,这不是重复的如何在 HAProxy 中缓存内容我只是希望 haproxy 将标头附加到对某些资产的请求中,告诉浏览器使用本地缓存版本(如果可用),但仅适用于 1 个特定域。
答案1
您可能只需一行就可以完成该操作,但这样更清楚:
frontend myfrontend
bind 0.0.0.0:80
default_backend default
acl cache_me path_dir /js
acl cache_me path_dir /images
use_backend cache if cache_me
backend default
server server1 1.2.3.4:80
backend cache
http-request set-header cache-control max-age="2592000"
server server1 1.2.3.4:80
解释:
该acl
关键字告诉 haproxy,如果条件满足,它应该将请求添加到特定的 acl。
path_dir
匹配子目录,而path
匹配整个路径。path_sub
这里可能更好,它在路径中查找子字符串。
use_backend
如果请求在 ACL 中,则将请求定向到特定后端。其他所有内容都将转到默认后端。
这样,您以后可以轻松添加更多路径,甚至可以根据需要将这些请求指向不同的服务器。
此外,也可以按域进行过滤:
frontend myfrontend
bind 0.0.0.0:80
default_backend default
acl cache_me path_dir /js
acl cache_me path_dir /images
acl domain1 hdr(host) -m sub example.com
use_backend cache if cache_me and domain1
backend default
server server1 1.2.3.4:80
backend cache
http-request set-header cache-control max-age="2592000"
server server1 1.2.3.4:80
答案2
frontend main
http-request set-var(txn.path) path
backend local
http-response set-header X-Robots-Tag noindex if { var(txn.path) -m end .pdf .doc }