mirror of
https://github.com/nginx/nginx.git
synced 2025-06-08 02:02:38 +08:00
Added the $proxy_protocol_port variable.
This commit is contained in:
parent
5b267a55bc
commit
f56cf3ddc7
@ -149,6 +149,7 @@ struct ngx_connection_s {
|
|||||||
ngx_str_t addr_text;
|
ngx_str_t addr_text;
|
||||||
|
|
||||||
ngx_str_t proxy_protocol_addr;
|
ngx_str_t proxy_protocol_addr;
|
||||||
|
in_port_t proxy_protocol_port;
|
||||||
|
|
||||||
#if (NGX_SSL)
|
#if (NGX_SSL)
|
||||||
ngx_ssl_connection_t *ssl;
|
ngx_ssl_connection_t *ssl;
|
||||||
|
@ -12,8 +12,9 @@
|
|||||||
u_char *
|
u_char *
|
||||||
ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
|
ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
u_char ch, *p, *addr;
|
u_char ch, *p, *addr, *port;
|
||||||
|
ngx_int_t n;
|
||||||
|
|
||||||
p = buf;
|
p = buf;
|
||||||
len = last - buf;
|
len = last - buf;
|
||||||
@ -71,8 +72,40 @@ ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
|
|||||||
ngx_memcpy(c->proxy_protocol_addr.data, addr, len);
|
ngx_memcpy(c->proxy_protocol_addr.data, addr, len);
|
||||||
c->proxy_protocol_addr.len = len;
|
c->proxy_protocol_addr.len = len;
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
|
for ( ;; ) {
|
||||||
"PROXY protocol address: \"%V\"", &c->proxy_protocol_addr);
|
if (p == last) {
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*p++ == ' ') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
port = p;
|
||||||
|
|
||||||
|
for ( ;; ) {
|
||||||
|
if (p == last) {
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*p++ == ' ') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len = p - port - 1;
|
||||||
|
|
||||||
|
n = ngx_atoi(port, len);
|
||||||
|
|
||||||
|
if (n < 0 || n > 65535) {
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
c->proxy_protocol_port = (in_port_t) n;
|
||||||
|
|
||||||
|
ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0,
|
||||||
|
"PROXY protocol address: %V %i", &c->proxy_protocol_addr, n);
|
||||||
|
|
||||||
skip:
|
skip:
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@ static ngx_int_t ngx_http_variable_remote_port(ngx_http_request_t *r,
|
|||||||
ngx_http_variable_value_t *v, uintptr_t data);
|
ngx_http_variable_value_t *v, uintptr_t data);
|
||||||
static ngx_int_t ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r,
|
static ngx_int_t ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r,
|
||||||
ngx_http_variable_value_t *v, uintptr_t data);
|
ngx_http_variable_value_t *v, uintptr_t data);
|
||||||
|
static ngx_int_t ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r,
|
||||||
|
ngx_http_variable_value_t *v, uintptr_t data);
|
||||||
static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r,
|
static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r,
|
||||||
ngx_http_variable_value_t *v, uintptr_t data);
|
ngx_http_variable_value_t *v, uintptr_t data);
|
||||||
static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r,
|
static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r,
|
||||||
@ -194,6 +196,9 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
|
|||||||
{ ngx_string("proxy_protocol_addr"), NULL,
|
{ ngx_string("proxy_protocol_addr"), NULL,
|
||||||
ngx_http_variable_proxy_protocol_addr, 0, 0, 0 },
|
ngx_http_variable_proxy_protocol_addr, 0, 0, 0 },
|
||||||
|
|
||||||
|
{ ngx_string("proxy_protocol_port"), NULL,
|
||||||
|
ngx_http_variable_proxy_protocol_port, 0, 0, 0 },
|
||||||
|
|
||||||
{ ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 },
|
{ ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 },
|
||||||
|
|
||||||
{ ngx_string("server_port"), NULL, ngx_http_variable_server_port, 0, 0, 0 },
|
{ ngx_string("server_port"), NULL, ngx_http_variable_server_port, 0, 0, 0 },
|
||||||
@ -1255,6 +1260,32 @@ ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static ngx_int_t
|
||||||
|
ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r,
|
||||||
|
ngx_http_variable_value_t *v, uintptr_t data)
|
||||||
|
{
|
||||||
|
ngx_uint_t port;
|
||||||
|
|
||||||
|
v->len = 0;
|
||||||
|
v->valid = 1;
|
||||||
|
v->no_cacheable = 0;
|
||||||
|
v->not_found = 0;
|
||||||
|
|
||||||
|
v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1);
|
||||||
|
if (v->data == NULL) {
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
port = r->connection->proxy_protocol_port;
|
||||||
|
|
||||||
|
if (port > 0 && port < 65536) {
|
||||||
|
v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NGX_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static ngx_int_t
|
static ngx_int_t
|
||||||
ngx_http_variable_server_addr(ngx_http_request_t *r,
|
ngx_http_variable_server_addr(ngx_http_request_t *r,
|
||||||
ngx_http_variable_value_t *v, uintptr_t data)
|
ngx_http_variable_value_t *v, uintptr_t data)
|
||||||
|
Loading…
Reference in New Issue
Block a user