diff options
author | Roman Arutyunyan <arut@nginx.com> | 2019-10-21 20:22:30 +0300 |
---|---|---|
committer | Roman Arutyunyan <arut@nginx.com> | 2019-10-21 20:22:30 +0300 |
commit | 203898505ca4fde338d718960e485891ecd891f6 (patch) | |
tree | bc1f73c9a4b2fb7af0d66ca6935a87488a452c88 /src/stream/ngx_stream_variables.c | |
parent | be932e81a1531a3ba032febad968fc2006c4fa48 (diff) | |
download | nginx-203898505ca4fde338d718960e485891ecd891f6.tar.gz nginx-203898505ca4fde338d718960e485891ecd891f6.zip |
Parsing server PROXY protocol address and port (ticket #1206).
New variables $proxy_protocol_server_addr and $proxy_protocol_server_port are
added both to HTTP and Stream.
Diffstat (limited to 'src/stream/ngx_stream_variables.c')
-rw-r--r-- | src/stream/ngx_stream_variables.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/stream/ngx_stream_variables.c b/src/stream/ngx_stream_variables.c index 995e23a4b..8b596683f 100644 --- a/src/stream/ngx_stream_variables.c +++ b/src/stream/ngx_stream_variables.c @@ -64,10 +64,20 @@ static ngx_stream_variable_t ngx_stream_core_variables[] = { ngx_stream_variable_remote_port, 0, 0, 0 }, { ngx_string("proxy_protocol_addr"), NULL, - ngx_stream_variable_proxy_protocol_addr, 0, 0, 0 }, + ngx_stream_variable_proxy_protocol_addr, + offsetof(ngx_proxy_protocol_t, src_addr), 0, 0 }, { ngx_string("proxy_protocol_port"), NULL, - ngx_stream_variable_proxy_protocol_port, 0, 0, 0 }, + ngx_stream_variable_proxy_protocol_port, + offsetof(ngx_proxy_protocol_t, src_port), 0, 0 }, + + { ngx_string("proxy_protocol_server_addr"), NULL, + ngx_stream_variable_proxy_protocol_addr, + offsetof(ngx_proxy_protocol_t, dst_addr), 0, 0 }, + + { ngx_string("proxy_protocol_server_port"), NULL, + ngx_stream_variable_proxy_protocol_port, + offsetof(ngx_proxy_protocol_t, dst_port), 0, 0 }, { ngx_string("server_addr"), NULL, ngx_stream_variable_server_addr, 0, 0, 0 }, @@ -557,6 +567,7 @@ static ngx_int_t ngx_stream_variable_proxy_protocol_addr(ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data) { + ngx_str_t *addr; ngx_proxy_protocol_t *pp; pp = s->connection->proxy_protocol; @@ -565,11 +576,13 @@ ngx_stream_variable_proxy_protocol_addr(ngx_stream_session_t *s, return NGX_OK; } - v->len = pp->src_addr.len; + addr = (ngx_str_t *) ((char *) pp + data); + + v->len = addr->len; v->valid = 1; v->no_cacheable = 0; v->not_found = 0; - v->data = pp->src_addr.data; + v->data = addr->data; return NGX_OK; } @@ -598,7 +611,7 @@ ngx_stream_variable_proxy_protocol_port(ngx_stream_session_t *s, return NGX_ERROR; } - port = pp->src_port; + port = *(in_port_t *) ((char *) pp + data); if (port > 0 && port < 65536) { v->len = ngx_sprintf(v->data, "%ui", port) - v->data; |