使用HAproxy将标头添加到特定URL的响应中

时间:2015-04-19 14:36:13

标签: load-balancing haproxy

我的HAproxy配置中有一个简单的条件(我试过 frontend 后端):

acl no_index_url path_end .pdf .doc .xls .docx .xlsx
rspadd X-Robots-Tag:\ noindex if no_index_url

它应该将no-robots标头添加到不应编入索引的内容中。但是在解析配置时它给了我WARNING

acl 'no_index_url' will never match because it only involves keywords
    that are incompatible with 'backend http-response header rule'

acl 'no_index_url' will never match because it only involves keywords
    that are incompatible with 'frontend http-response header rule'

根据documentationrspadd可用于前端后端 frontend 中的示例中使用了path_end。为什么我会收到此错误,这是什么意思?

3 个答案:

答案 0 :(得分:13)

从HaProxy 1.6开始,您将无法忽略错误消息。要使其正常工作,请使用临时变量功能:

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 }

答案 1 :(得分:2)

显然,即使有警告,在前端内设置acl也能完美无缺。所有使用.pdf,.doc等的资源都会添加正确的X-Robots-Tag

换句话说,这个WARNING会产生误导,实际上acl 匹配。

答案 2 :(得分:0)

如果在v1.6以下使用haproxy,请创建一个新的后端块(可以与默认后端重复)并在其中添加特殊的标头。然后在前端有条件地使用该后端。即

use_backend alt_backend if { some_condition } 

虽然不是理想的解决方案,但确实可以。