Изучение исключений ковбоев / ковлибов / ранчо в приложении Phoenix

У меня есть приложение Phoenix, которое постоянно вызывает несколько разных исключений в рабочей среде. Я пытаюсь исследовать исключения, но не уверен, что моя конфигурация конечной точки неверна, это ошибки в зависимостях? Проблемы как-то связаны? Какая зависимость за них отвечает?

Я не хочу открывать билеты и начинать разговор о пинг-понге между разными проектами, поэтому я подумал сначала спросить здесь.

зависимости

  • ковбой: 1.0.4
  • cowlib: 1.0.2
  • ранчо: 1.2.1
  • феникс: 1,2

Исключения

1)

17:58:21.973 [error] Ranch protocol #PID<0.8216.13> (:cowboy_protocol) of listener Krihelinator.Endpoint.HTTP terminated
** (exit) an exception was raised:
   ** (FunctionClauseError) no function clause matching in :cowboy_protocol.parse_method/3
        (cowboy) src/cowboy_protocol.erl:168: :cowboy_protocol.parse_method("", {:state, #Port<0.19168>, :ranch_tcp, [:cowboy_router, :cowboy_handler], true, [listener: Krihelinator.Endpoint.HTTP, dispatch: [{:_, [], [{["socket", "websocket"], [], Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, {Krihelinator.Endpoint, Krihelinator.UserSocket, :websocket}}}, {:_, [], Plug.Adapters.Cowboy.Handler, {Krihelinator.Endpoint, []}}]}]], :undefined, :undefined, 5, 1, 100, 4096, 64, 4096, 100, 5000, 1490810306970}, <<0, 0, 0, 113, 106, 129, 110, 48, 129, 107, 161, 3, 2, 1, 5, 162, 3, 2, 1, 10, 164, 129, 94, 48, 92, 160, 7, 3, 5, 0, 80, 128, 0, 16, 162, 4, 27, 2, 78, 77, 163, 23, 48, 21, 160, 3, 2, 1, 0, 161, ...>>)

2)

2017-04-06 06:21:14.693 [error] Ranch protocol #PID<0.21785.1> (:cowboy_protocol) of listener Krihelinator.Endpoint.HTTP terminated
** (exit) an exception was raised:
    ** (FunctionClauseError) no function clause matching in :cowboy_protocol.parse_uri_path/4
        (cowboy) src/cowboy_protocol.erl:200: :cowboy_protocol.parse_uri_path("", {:state, #Port<0.6072>, :ranch_tcp, [:cowboy_router, :cowboy_handler], true, [listener: Krihelinator.Endpoint.HTTP, dispatch: [{:_, [], [{["socket", "websocket"], [], Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, {Krihelinator.Endpoint, Krihelinator.UserSocket, :websocket}}}, {:_, [], Plug.Adapters.Cowboy.Handler, {Krihelinator.Endpoint, []}}]}]], :undefined, :undefined, 5, 1, 100, 4096, 64, 4096, 100, 5000, 1491459679639}, <<71, 104, 48, 115, 116, 173, 0, 0, 0, 224, 0, 0, 0, 120, 156, 75, 83, 96, 96, 152, 195, 192, 192, 192, 6, 196, 140, 64, 188, 81, 150, 129, 129, 9, 72, 7, 167, 22, 149, 101, 38, 167, 42, 4, 36, 38, 103, 43, 24, 50, ...>>, <<2, 0, 84, 245, 43, 92>>)

3)

18:20:18.395 [error] Ranch protocol #PID<0.28926.18> (:cowboy_protocol) of listener Krihelinator.Endpoint.HTTP terminated
** (exit) an exception was raised:
    ** (FunctionClauseError) no function clause matching in :cow_http_hd.token_ci_list_sep/3
        (cowlib) src/cow_http_hd.erl:191: :cow_http_hd.token_ci_list_sep("Te", [], "keep-alive")
        (cowlib) src/cow_http_hd.erl:31: :cow_http_hd.parse_connection/1
        (cowboy) src/cowboy_req.erl:189: :cowboy_req.new/14
        (cowboy) src/cowboy_protocol.erl:410: :cowboy_protocol.request/9

Как видите, я понятия не имею, почему возникают проблемы. Так что, возможно, я не предоставил достаточно информации. Пожалуйста, запросите больше, если необходимо. Мы будем очень благодарны за любые рекомендации, которые помогут мне исправить эти или открыть тикеты для правильного проекта.


person Nagasaki45    schedule 08.04.2017    source источник


Ответы (1)


Клиент отправляет недопустимый заголовок keepalive, и ковбой очень строг к этому, см. https://github.com/ninenines/cowboy/issues/943.

Если вы знаете клиента, вы можете попросить исправить или переписать заголовок в прокси, например haproxy

  # cowboy crashes when invalid headers are sent
  # see https://github.com/ninenines/cowboy/issues/943
  acl invalid_keepalive_header hdr(Connection) -i keep-alive\ Te
  reqirep ^Connection:\ keep-alive\ Te  Connection:\ keep-alive,\ Te if invalid_keepalive_header

  acl invalid_keepalive_header_1 hdr(Connection) -i Te\ keep-alive
  reqirep ^Connection:\ Te\ keep-alive  Connection:\ keep-alive,\ Te if invalid_keepalive_header_1
person Holger Amann    schedule 18.11.2017