Mercurial > hg > nginx
comparison src/stream/ngx_stream_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 | cca4c8a715de |
comparison
equal
deleted
inserted
replaced
7590:06b01840bd42 | 7591:89adf49fe76a |
---|---|
62 | 62 |
63 { ngx_string("remote_port"), NULL, | 63 { ngx_string("remote_port"), NULL, |
64 ngx_stream_variable_remote_port, 0, 0, 0 }, | 64 ngx_stream_variable_remote_port, 0, 0, 0 }, |
65 | 65 |
66 { ngx_string("proxy_protocol_addr"), NULL, | 66 { ngx_string("proxy_protocol_addr"), NULL, |
67 ngx_stream_variable_proxy_protocol_addr, 0, 0, 0 }, | 67 ngx_stream_variable_proxy_protocol_addr, |
68 offsetof(ngx_proxy_protocol_t, src_addr), 0, 0 }, | |
68 | 69 |
69 { ngx_string("proxy_protocol_port"), NULL, | 70 { ngx_string("proxy_protocol_port"), NULL, |
70 ngx_stream_variable_proxy_protocol_port, 0, 0, 0 }, | 71 ngx_stream_variable_proxy_protocol_port, |
72 offsetof(ngx_proxy_protocol_t, src_port), 0, 0 }, | |
73 | |
74 { ngx_string("proxy_protocol_server_addr"), NULL, | |
75 ngx_stream_variable_proxy_protocol_addr, | |
76 offsetof(ngx_proxy_protocol_t, dst_addr), 0, 0 }, | |
77 | |
78 { ngx_string("proxy_protocol_server_port"), NULL, | |
79 ngx_stream_variable_proxy_protocol_port, | |
80 offsetof(ngx_proxy_protocol_t, dst_port), 0, 0 }, | |
71 | 81 |
72 { ngx_string("server_addr"), NULL, | 82 { ngx_string("server_addr"), NULL, |
73 ngx_stream_variable_server_addr, 0, 0, 0 }, | 83 ngx_stream_variable_server_addr, 0, 0, 0 }, |
74 | 84 |
75 { ngx_string("server_port"), NULL, | 85 { ngx_string("server_port"), NULL, |
555 | 565 |
556 static ngx_int_t | 566 static ngx_int_t |
557 ngx_stream_variable_proxy_protocol_addr(ngx_stream_session_t *s, | 567 ngx_stream_variable_proxy_protocol_addr(ngx_stream_session_t *s, |
558 ngx_stream_variable_value_t *v, uintptr_t data) | 568 ngx_stream_variable_value_t *v, uintptr_t data) |
559 { | 569 { |
570 ngx_str_t *addr; | |
560 ngx_proxy_protocol_t *pp; | 571 ngx_proxy_protocol_t *pp; |
561 | 572 |
562 pp = s->connection->proxy_protocol; | 573 pp = s->connection->proxy_protocol; |
563 if (pp == NULL) { | 574 if (pp == NULL) { |
564 v->not_found = 1; | 575 v->not_found = 1; |
565 return NGX_OK; | 576 return NGX_OK; |
566 } | 577 } |
567 | 578 |
568 v->len = pp->src_addr.len; | 579 addr = (ngx_str_t *) ((char *) pp + data); |
569 v->valid = 1; | 580 |
570 v->no_cacheable = 0; | 581 v->len = addr->len; |
571 v->not_found = 0; | 582 v->valid = 1; |
572 v->data = pp->src_addr.data; | 583 v->no_cacheable = 0; |
584 v->not_found = 0; | |
585 v->data = addr->data; | |
573 | 586 |
574 return NGX_OK; | 587 return NGX_OK; |
575 } | 588 } |
576 | 589 |
577 | 590 |
596 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1); | 609 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1); |
597 if (v->data == NULL) { | 610 if (v->data == NULL) { |
598 return NGX_ERROR; | 611 return NGX_ERROR; |
599 } | 612 } |
600 | 613 |
601 port = pp->src_port; | 614 port = *(in_port_t *) ((char *) pp + data); |
602 | 615 |
603 if (port > 0 && port < 65536) { | 616 if (port > 0 && port < 65536) { |
604 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; | 617 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; |
605 } | 618 } |
606 | 619 |