我如何使用 HAProxy 来 return 基于 URL 中未编码字符的 400 错误?

how would I use HAProxy to return a 400 error based on unencoded characters in the URL?

我想编写一个 haproxy 规则,当 url 包含未编码的字符时,该规则会 return 400 错误请求错误消息。这些不良字符会导致我的应用程序出现服务器错误,并最终导致内存不足错误,最好能及时阻止它们。

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

我想我需要类似的东西

acl bad_char path_reg [(badcharsethere)] 

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

创建一个伪造的 back-end,并将其 503(服务不可用)静态 HTTP 响应文件配置为指向您将用作预制响应的文件,然后使用该文件 back-end 提供服务那些要求。客户端看到的错误代码仅由静态文件中的内容决定。复制示例错误文件之一并记住它们是原始 HTTP 响应,因此您需要在每个 header 末尾添加 \r\n 并在 [=20= 末尾添加 \r\n\r\n ]s.

use_backend bogus if bad_char

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

当 ACL 匹配时,HAProxy 将尝试使用没有服务器的伪造 back-end,因此 HAProxy 将尝试 return 503,这将 return 您的自定义响应文件,您已将其修改为 return 自定义 400 错误。