Merge pull request #8415 from zmstone/0704-fix-http-proxy-headers
fix(ws): websocket header get expects bin-string
This commit is contained in:
commit
9504865661
|
@ -1,3 +1,9 @@
|
||||||
|
# 5.0.3
|
||||||
|
|
||||||
|
## Bug fixes
|
||||||
|
|
||||||
|
* Websocket listener failed to read headers `X-Forwared-For` and `X-Forwarded-Port` [8415](https://github.com/emqx/emqx/pull/8415)
|
||||||
|
|
||||||
# 5.0.2
|
# 5.0.2
|
||||||
|
|
||||||
Announcemnet: EMQX team has decided to stop supporting relup for opensouce edition.
|
Announcemnet: EMQX team has decided to stop supporting relup for opensouce edition.
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
%% `apps/emqx/src/bpapi/README.md'
|
%% `apps/emqx/src/bpapi/README.md'
|
||||||
|
|
||||||
%% Community edition
|
%% Community edition
|
||||||
-define(EMQX_RELEASE_CE, "5.0.2").
|
-define(EMQX_RELEASE_CE, "5.0.3").
|
||||||
|
|
||||||
%% Enterprise edition
|
%% Enterprise edition
|
||||||
-define(EMQX_RELEASE_EE, "5.0.0-alpha.1").
|
-define(EMQX_RELEASE_EE, "5.0.0-alpha.1").
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{id, "emqx"},
|
{id, "emqx"},
|
||||||
{description, "EMQX Core"},
|
{description, "EMQX Core"},
|
||||||
% strict semver, bump manually!
|
% strict semver, bump manually!
|
||||||
{vsn, "5.0.2"},
|
{vsn, "5.0.3"},
|
||||||
{modules, []},
|
{modules, []},
|
||||||
{registered, []},
|
{registered, []},
|
||||||
{applications, [
|
{applications, [
|
||||||
|
|
|
@ -981,9 +981,8 @@ trigger(Event) -> erlang:send(self(), Event).
|
||||||
|
|
||||||
get_peer(Req, #{listener := {Type, Listener}}) ->
|
get_peer(Req, #{listener := {Type, Listener}}) ->
|
||||||
{PeerAddr, PeerPort} = cowboy_req:peer(Req),
|
{PeerAddr, PeerPort} = cowboy_req:peer(Req),
|
||||||
AddrHeader = cowboy_req:header(
|
AddrHeaderName = get_ws_header_opts(Type, Listener, proxy_address_header),
|
||||||
get_ws_opts(Type, Listener, proxy_address_header), Req, <<>>
|
AddrHeader = cowboy_req:header(AddrHeaderName, Req, <<>>),
|
||||||
),
|
|
||||||
ClientAddr =
|
ClientAddr =
|
||||||
case string:tokens(binary_to_list(AddrHeader), ", ") of
|
case string:tokens(binary_to_list(AddrHeader), ", ") of
|
||||||
[] ->
|
[] ->
|
||||||
|
@ -998,9 +997,8 @@ get_peer(Req, #{listener := {Type, Listener}}) ->
|
||||||
_ ->
|
_ ->
|
||||||
PeerAddr
|
PeerAddr
|
||||||
end,
|
end,
|
||||||
PortHeader = cowboy_req:header(
|
PortHeaderName = get_ws_header_opts(Type, Listener, proxy_port_header),
|
||||||
get_ws_opts(Type, Listener, proxy_port_header), Req, <<>>
|
PortHeader = cowboy_req:header(PortHeaderName, Req, <<>>),
|
||||||
),
|
|
||||||
ClientPort =
|
ClientPort =
|
||||||
case string:tokens(binary_to_list(PortHeader), ", ") of
|
case string:tokens(binary_to_list(PortHeader), ", ") of
|
||||||
[] ->
|
[] ->
|
||||||
|
@ -1042,6 +1040,10 @@ set_field(Name, Value, State) ->
|
||||||
Pos = emqx_misc:index_of(Name, record_info(fields, state)),
|
Pos = emqx_misc:index_of(Name, record_info(fields, state)),
|
||||||
setelement(Pos + 1, State, Value).
|
setelement(Pos + 1, State, Value).
|
||||||
|
|
||||||
|
%% ensure lowercase letters in headers
|
||||||
|
get_ws_header_opts(Type, Listener, Key) ->
|
||||||
|
iolist_to_binary(string:lowercase(get_ws_opts(Type, Listener, Key))).
|
||||||
|
|
||||||
get_ws_opts(Type, Listener, Key) ->
|
get_ws_opts(Type, Listener, Key) ->
|
||||||
emqx_config:get_listener_conf(Type, Listener, [websocket, Key]).
|
emqx_config:get_listener_conf(Type, Listener, [websocket, Key]).
|
||||||
|
|
||||||
|
|
|
@ -156,7 +156,8 @@ listener_mqtt_ws_conf() ->
|
||||||
max_frame_size => infinity,
|
max_frame_size => infinity,
|
||||||
mqtt_path => "/mqtt",
|
mqtt_path => "/mqtt",
|
||||||
mqtt_piggyback => multiple,
|
mqtt_piggyback => multiple,
|
||||||
proxy_address_header => "x-forwarded-for",
|
% should allow uppercase in config
|
||||||
|
proxy_address_header => "X-Forwarded-For",
|
||||||
proxy_port_header => "x-forwarded-port",
|
proxy_port_header => "x-forwarded-port",
|
||||||
supported_subprotocols =>
|
supported_subprotocols =>
|
||||||
["mqtt", "mqtt-v3", "mqtt-v3.1.1", "mqtt-v5"]
|
["mqtt", "mqtt-v3", "mqtt-v3.1.1", "mqtt-v5"]
|
||||||
|
|
Loading…
Reference in New Issue