You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx使请求头或Cookie过大时返回431而非400状态码

方案有效性说明

你找到的map $status $status_text配置仅能自定义状态码对应的文本描述,无法修改Nginx实际返回的HTTP状态码,单独使用该配置无法实现你的需求。

最简单的实现方式

你可以通过Nginx的error_page指令结合错误信息匹配,精准将「请求头/Cookie过大」场景的400状态码改写为431,其余场景的400错误不受影响,配置步骤如下:

  1. 在http块中新增如下映射规则,用于识别需要改写状态码的错误场景:
http {
    # 原有配置保持不变
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 新增如下配置
    map $errormsg $custom_status {
        default "";
        ~*"Request Header Or Cookie Too Large" 431;
    }

    map $status $status_text {
        431 'Request Header Fields Too Large';
    }

    include /etc/nginx/conf.d/*.conf;
}
  1. 在对应业务的server块中新增错误捕获规则:
server {
    # 原有配置保持不变
    large_client_header_buffers 4 32k;

    # 新增如下配置
    error_page 400 =$custom_status @rewrite_header_error;

    location @rewrite_header_error {
        # 非请求头过大的400错误保持原状态码返回
        if ($custom_status = "") {
            return 400;
        }
        add_header Content-Type text/html;
        return 431 '<html>
<head><title>431 Request Header Fields Too Large</title></head>
<body>
<center><h1>431 Bad Request</h1></center>
<center>Request Header Or Cookie Too Large</center>
<hr><center>nginx</center>
</body>
</html>';
    }
}
  1. 执行配置校验和重载生效:
nginx -t && nginx -s reload

简化方案(无需区分其他400错误时使用)

如果你不需要保留其他场景的400状态码,可以去掉错误信息匹配逻辑,直接全局改写:

server {
    error_page 400 =431 /431.html;
    # 可自定义431返回内容或直接指向静态错误页
}

内容的提问来源于stack exchange,提问作者Alex Kuzminov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:27:05