Mercurial > hg > nginx
diff src/http/ngx_http_variables.c @ 7591:89adf49fe76a
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.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 21 Oct 2019 20:22:30 +0300 |
parents | 06b01840bd42 |
children | 028b16e2798f |
line wrap: on
line diff
--- a/src/http/ngx_http_variables.c Mon Oct 21 18:06:19 2019 +0300 +++ b/src/http/ngx_http_variables.c Mon Oct 21 20:22:30 2019 +0300 @@ -199,10 +199,20 @@ { ngx_string("remote_port"), NULL, ngx_http_variable_remote_port, 0, 0, 0 }, { ngx_string("proxy_protocol_addr"), NULL, - ngx_http_variable_proxy_protocol_addr, 0, 0, 0 }, + ngx_http_variable_proxy_protocol_addr, + offsetof(ngx_proxy_protocol_t, src_addr), 0, 0 }, { ngx_string("proxy_protocol_port"), NULL, - ngx_http_variable_proxy_protocol_port, 0, 0, 0 }, + ngx_http_variable_proxy_protocol_port, + offsetof(ngx_proxy_protocol_t, src_port), 0, 0 }, + + { ngx_string("proxy_protocol_server_addr"), NULL, + ngx_http_variable_proxy_protocol_addr, + offsetof(ngx_proxy_protocol_t, dst_addr), 0, 0 }, + + { ngx_string("proxy_protocol_server_port"), NULL, + ngx_http_variable_proxy_protocol_port, + offsetof(ngx_proxy_protocol_t, dst_port), 0, 0 }, { ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 }, @@ -1293,6 +1303,7 @@ ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { + ngx_str_t *addr; ngx_proxy_protocol_t *pp; pp = r->connection->proxy_protocol; @@ -1301,11 +1312,13 @@ 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; } @@ -1334,7 +1347,7 @@ 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;