使用 HAproxy 添加 header 到特定 URL 的响应
Adding header to response for specific URLs with HAproxy
我的 HAproxy 配置中有一个简单的条件(我为 frontend 和 backend 试过):
acl no_index_url path_end .pdf .doc .xls .docx .xlsx
rspadd X-Robots-Tag:\ noindex if no_index_url
它应该将 no-robots header 添加到不应被索引的内容。但是它在解析配置时给了我这个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'
根据 documentation,rspadd
可用于 前端 和 后端 。 path_end
用于 frontend 中的示例。为什么我会收到此错误,这是什么意思?
显然,即使有警告,前端中的 acl
也能正常工作。所有带有 .pdf、.doc 等的资源都得到了正确的 X-Robots-Tag
添加。
换句话说,这个 WARNING
具有误导性,实际上 acl
匹配。
从 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 }
如果使用 v1.6 以下的 haproxy,创建一个新的后端块(可以是默认后端的副本)并在其中添加特殊的 headers。然后在前端有条件地使用该后端。即
use_backend alt_backend if { some_condition }
诚然这不是一个理想的解决方案,但它确实可以。
我的 HAproxy 配置中有一个简单的条件(我为 frontend 和 backend 试过):
acl no_index_url path_end .pdf .doc .xls .docx .xlsx
rspadd X-Robots-Tag:\ noindex if no_index_url
它应该将 no-robots header 添加到不应被索引的内容。但是它在解析配置时给了我这个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'
根据 documentation,rspadd
可用于 前端 和 后端 。 path_end
用于 frontend 中的示例。为什么我会收到此错误,这是什么意思?
显然,即使有警告,前端中的 acl
也能正常工作。所有带有 .pdf、.doc 等的资源都得到了正确的 X-Robots-Tag
添加。
换句话说,这个 WARNING
具有误导性,实际上 acl
匹配。
从 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 }
如果使用 v1.6 以下的 haproxy,创建一个新的后端块(可以是默认后端的副本)并在其中添加特殊的 headers。然后在前端有条件地使用该后端。即
use_backend alt_backend if { some_condition }
诚然这不是一个理想的解决方案,但它确实可以。