Mercurial > hg > nginx
comparison 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 |
comparison
equal
deleted
inserted
replaced
7590:06b01840bd42 | 7591:89adf49fe76a |
---|---|
197 { ngx_string("remote_addr"), NULL, ngx_http_variable_remote_addr, 0, 0, 0 }, | 197 { ngx_string("remote_addr"), NULL, ngx_http_variable_remote_addr, 0, 0, 0 }, |
198 | 198 |
199 { ngx_string("remote_port"), NULL, ngx_http_variable_remote_port, 0, 0, 0 }, | 199 { ngx_string("remote_port"), NULL, ngx_http_variable_remote_port, 0, 0, 0 }, |
200 | 200 |
201 { ngx_string("proxy_protocol_addr"), NULL, | 201 { ngx_string("proxy_protocol_addr"), NULL, |
202 ngx_http_variable_proxy_protocol_addr, 0, 0, 0 }, | 202 ngx_http_variable_proxy_protocol_addr, |
203 offsetof(ngx_proxy_protocol_t, src_addr), 0, 0 }, | |
203 | 204 |
204 { ngx_string("proxy_protocol_port"), NULL, | 205 { ngx_string("proxy_protocol_port"), NULL, |
205 ngx_http_variable_proxy_protocol_port, 0, 0, 0 }, | 206 ngx_http_variable_proxy_protocol_port, |
207 offsetof(ngx_proxy_protocol_t, src_port), 0, 0 }, | |
208 | |
209 { ngx_string("proxy_protocol_server_addr"), NULL, | |
210 ngx_http_variable_proxy_protocol_addr, | |
211 offsetof(ngx_proxy_protocol_t, dst_addr), 0, 0 }, | |
212 | |
213 { ngx_string("proxy_protocol_server_port"), NULL, | |
214 ngx_http_variable_proxy_protocol_port, | |
215 offsetof(ngx_proxy_protocol_t, dst_port), 0, 0 }, | |
206 | 216 |
207 { ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 }, | 217 { ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 }, |
208 | 218 |
209 { ngx_string("server_port"), NULL, ngx_http_variable_server_port, 0, 0, 0 }, | 219 { ngx_string("server_port"), NULL, ngx_http_variable_server_port, 0, 0, 0 }, |
210 | 220 |
1291 | 1301 |
1292 static ngx_int_t | 1302 static ngx_int_t |
1293 ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r, | 1303 ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r, |
1294 ngx_http_variable_value_t *v, uintptr_t data) | 1304 ngx_http_variable_value_t *v, uintptr_t data) |
1295 { | 1305 { |
1306 ngx_str_t *addr; | |
1296 ngx_proxy_protocol_t *pp; | 1307 ngx_proxy_protocol_t *pp; |
1297 | 1308 |
1298 pp = r->connection->proxy_protocol; | 1309 pp = r->connection->proxy_protocol; |
1299 if (pp == NULL) { | 1310 if (pp == NULL) { |
1300 v->not_found = 1; | 1311 v->not_found = 1; |
1301 return NGX_OK; | 1312 return NGX_OK; |
1302 } | 1313 } |
1303 | 1314 |
1304 v->len = pp->src_addr.len; | 1315 addr = (ngx_str_t *) ((char *) pp + data); |
1305 v->valid = 1; | 1316 |
1306 v->no_cacheable = 0; | 1317 v->len = addr->len; |
1307 v->not_found = 0; | 1318 v->valid = 1; |
1308 v->data = pp->src_addr.data; | 1319 v->no_cacheable = 0; |
1320 v->not_found = 0; | |
1321 v->data = addr->data; | |
1309 | 1322 |
1310 return NGX_OK; | 1323 return NGX_OK; |
1311 } | 1324 } |
1312 | 1325 |
1313 | 1326 |
1332 v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1); | 1345 v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1); |
1333 if (v->data == NULL) { | 1346 if (v->data == NULL) { |
1334 return NGX_ERROR; | 1347 return NGX_ERROR; |
1335 } | 1348 } |
1336 | 1349 |
1337 port = pp->src_port; | 1350 port = *(in_port_t *) ((char *) pp + data); |
1338 | 1351 |
1339 if (port > 0 && port < 65536) { | 1352 if (port > 0 && port < 65536) { |
1340 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; | 1353 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; |
1341 } | 1354 } |
1342 | 1355 |