2017-10-20 68 views
0

AWS HealthCheck端点不会发送任何会导致Cowboy(v 1.1.2)返回400的标头。这会导致容器重新启动。牛仔返回400无标头

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

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

卷曲请求重现错误:

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]] 
+1

HTTP协议中需要主机头:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host – narrowtux

回答

0

我结束了使用以下端点配置运行服务器:

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

并且问题已解决。

这可能与牛仔在ELB后面运行https服务器的事实有关。