牛仔returns400无headers

Cowboy returns 400 without headers

AWS HealthCheck 端点不发送任何 headers 导致 Cowboy (v 1.1.2) 到 return 400。这导致容器重新启动。

有什么办法解决这个问题吗?

相关 github 问题:https://github.com/phoenixframework/phoenix/issues/2437

curl 请求重现错误:

   curl http://localhost:4000/ping  -H 'Host:'

日志:

[error] Cowboy returned 400 and there are no headers in the connection.

This may happen if Cowboy is unable to parse the request headers,
for example, because there are too many headers or the header name
or value are too large (such as a large cookie).

You can customize those values when configuring your http/https
server. The configuration option and default values are shown below:

    protocol_options: [
      max_header_name_length: 64,
      max_header_value_length: 4096,
      max_headers: 100
    ]

端点配置:

 config :my_app, MyAppWeb.Endpoint,
   load_from_system_env: true,
   url: [host: System.get_env("MY_HOST"), port: 443],
   force_ssl: [rewrite_on: [:x_forwarded_proto]]

我最终 运行 服务器具有以下端点配置:

config :my_app, MyAppWeb.Endpoint,
  load_from_system_env: true,
  http: [port: 4000]

问题已解决。

这可能与 cowboy 是 ELB 背后的 运行 https 服务器有关。