From 231c800f40606aea9127a618ca115016e46c974e Mon Sep 17 00:00:00 2001 From: Rory-Z Date: Thu, 27 May 2021 06:26:28 +0000 Subject: [PATCH] fix(ws connect): fix ws connect with Proxy Protocol capture wrong client-ip --- src/emqx.appup.src | 4 ++++ src/emqx_ws_connection.erl | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 1931b9e2b..69c6e882c 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -2,6 +2,7 @@ {VSN, [ {"4.3.1", [ + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_cm, brutal_purge, soft_purge, []}, @@ -14,6 +15,7 @@ ]}, {"4.3.0", [ {load_module, emqx_logger_jsonfmt, brutal_purge, soft_purge, []}, + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_congestion, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, @@ -32,6 +34,7 @@ ], [ {"4.3.1", [ + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, {load_module, emqx_cm, brutal_purge, soft_purge, []}, @@ -44,6 +47,7 @@ ]}, {"4.3.0", [ {load_module, emqx_logger_jsonfmt, brutal_purge, soft_purge, []}, + {load_module, emqx_ws_connection, brutal_purge, soft_purge, []}, {load_module, emqx_connection, brutal_purge, soft_purge, []}, {load_module, emqx_congestion, brutal_purge, soft_purge, []}, {load_module, emqx_frame, brutal_purge, soft_purge, []}, diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index 389a81e7b..7bc68c271 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -257,13 +257,16 @@ websocket_init([Req, Opts]) -> case proplists:get_bool(proxy_protocol, Opts) andalso maps:get(proxy_header, Req) of #{src_address := SrcAddr, src_port := SrcPort, ssl := SSL} -> - ProxyName = {SrcAddr, SrcPort}, + SourceName = {SrcAddr, SrcPort}, %% Notice: Only CN is available in Proxy Protocol V2 additional info - ProxySSL = case maps:get(cn, SSL, undefined) of + SourceSSL = case maps:get(cn, SSL, undefined) of undeined -> nossl; CN -> [{pp2_ssl_cn, CN}] end, - {ProxyName, ProxySSL}; + {SourceName, SourceSSL}; + #{src_address := SrcAddr, src_port := SrcPort} -> + SourceName = {SrcAddr, SrcPort}, + {SourceName , nossl}; _ -> {get_peer(Req, Opts), cowboy_req:cert(Req)} end,