使用 HAProxy 修改特定 URL 的 http 标头

使用 HAProxy 修改特定 URL 的 http 标头

对于特定的 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 }

相关内容