【问题标题】:how would I use HAProxy to return a 400 error based on unencoded characters in the URL?我将如何使用 HAProxy 根据 URL 中的未编码字符返回 400 错误?
【发布时间】:2023-04-09 11:12:01
【问题描述】:

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

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

我想我需要类似的东西

acl bad_char path_reg [(badcharsethere)] 

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

【问题讨论】:

    标签: redirect haproxy


    【解决方案1】:

    创建一个假后端,并将其 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 错误。

    【讨论】:

    • 很高兴你喜欢它。附言你真的应该修复你的服务器。 :) 但我想到还有另一个可能很酷的选项,在 HAProxy 1.6 中使用 Lua ...您可以编写一个小的 Lua 函数来替换虚假字符并将重定向返回到浏览器或使用“更正”的 URI 在Location: 标头。或者您可以使用 Lua 的 string.gsub() 处理请求,然后 HAProxy 会以“更正”的形式将其转发到服务器。
    • 这是个好主意。 :-)(修复服务器和 Lua 替换功能。)
    • 我忘记了新的regsub converter ... HAProxy 1.6 中有很多好东西。
    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 2013-01-16
    • 2022-06-23
    • 1970-01-01
    • 2015-03-13
    • 2018-05-31
    • 2011-06-03
    • 2016-06-20
    相关资源
    最近更新 更多