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

Elixir Phoenix应用请求头超4000字符返回431错误如何配置修复?

Phoenix 应用解决Cookie过多导致431错误方案

Phoenix 默认使用 Cowboy 作为Web服务器,其默认总请求头大小、单请求头值上限均为4KB,当顶级域名下共享的全局Cookie累积过多时,会超出默认阈值触发431 Request Header Fields Too Large 错误,可通过以下步骤调整配置:

1. 调整Phoenix服务端配置

打开项目对应环境的配置文件,生产环境修改 config/prod.exs,需全环境生效修改 config/config.exs:

  • 在Endpoint配置块中新增http/https配置项,调整请求头相关参数,单位为字节:
# 替换下方的your_app_name、YourAppNameWeb为你实际的应用命名空间
config :your_app_name, YourAppNameWeb.Endpoint,
  # 保留原有url、cache_static_manifest等配置不变,新增/修改http配置
  http: [
    port: System.get_env("PORT") || 4000,
    max_header_name_length: 64,
    max_header_value_length: 16384, # 单请求头值最大16KB,可根据实际Cookie大小调整
    max_headers: 100,
    max_request_line_length: 16384
  ],
  # 若直接使用Phoenix开启HTTPS服务,同步添加以下https配置
  https: [
    port: 443,
    cipher_suite: :strong,
    keyfile: System.get_env("SSL_KEY_FILE_PATH"),
    certfile: System.get_env("SSL_CERT_FILE_PATH"),
    max_header_name_length: 64,
    max_header_value_length: 16384,
    max_headers: 100,
    max_request_line_length: 16384
  ]

2. 调整反向代理层配置(如有)

如果你的站点前置了Nginx、Caddy等反向代理服务,需要同步调整代理层的请求头限制,避免限制在代理层触发:

  • Nginx 配置参考,在server块中添加:
    large_client_header_buffers 4 16k;
  • 需确保代理层的请求头限制值大于等于Phoenix侧的配置值。

注意事项

不要将请求头限制设置得过大,过高的阈值会提升服务器被慢速HTTP攻击的风险,建议根据站点实际Cookie平均大小增加20%~30%冗余即可,通常16KB的单请求头值上限足以覆盖绝大多数大型域名的Cookie场景。

内容的提问来源于stack exchange,提问作者Topher Hunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:24:04