如何根据URL中未编码的字符使用HAProxy返回400错误?

时间:2015-10-28 18:29:31

标签: redirect haproxy

我想写一个haproxy规则,当url包含未编码的字符时,它将返回400错误请求错误消息。这些不良字符导致我的应用程序中的服务器错误,并最终导致内存不足错误,并且在通过时将它们关闭是很好的。

正确的方法(我知道)是在服务器端修复此问题,但由于很多愚蠢的原因,我现在无法更改该代码。

我想我需要像

这样的东西
acl bad_char path_reg [(badcharsethere)] 

但我无法找到重定向到400错误的示例。

1 个答案:

答案 0 :(得分:3)

创建虚假后端,并将其503(服务不可用)静态HTTP响应文件配置为指向您将用作预设响应的文件,然后使用该后端为这些请求提供服务。客户端看到的错误代码仅由静态文件中的内容确定。复制其中一个示例错误文件并记住它们是原始HTTP响应,因此您需要在每个标头的末尾添加\r\n,并在标题末尾添加\r\n\r\n

use_backend bogus if bad_char

backend bogus
    errorfile 503 /etc/haproxy/errors/400badchar.http

当匹配ACL时,HAProxy将尝试使用没有服务器的伪造后端,因此HAProxy将尝试返回503,这将返回您的自定义响应文件,您将修改该文件以返回自定义400错误。