diff options
| author | Ruslan Ermilov <ru@nginx.com> | 2016-03-15 13:36:19 +0300 |
|---|---|---|
| committer | Ruslan Ermilov <ru@nginx.com> | 2016-03-15 13:36:19 +0300 |
| commit | 86927c65885157e0e9040a4a50da80d62a3aa29e (patch) | |
| tree | 8cbbbd357c57e3917aba4ed6da7a18287d606334 /src/http/v2 | |
| parent | b3c1abdcd8dd91ca1298c47b5abd567b9bcb3cf2 (diff) | |
| download | nginx-86927c65885157e0e9040a4a50da80d62a3aa29e.tar.gz nginx-86927c65885157e0e9040a4a50da80d62a3aa29e.tar.bz2 | |
Added variables support to server_tokens.
It can now be set to "off" conditionally, e.g. using the map
directive.
An empty value will disable the emission of the Server: header
and the signature in error messages generated by nginx.
Any other value is treated as "on", meaning that full nginx
version is emitted in the Server: header and error messages
generated by nginx.
Diffstat (limited to 'src/http/v2')
| -rw-r--r-- | src/http/v2/ngx_http_v2_filter_module.c | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c index caa835dec..da78407ee 100644 --- a/src/http/v2/ngx_http_v2_filter_module.c +++ b/src/http/v2/ngx_http_v2_filter_module.c @@ -128,8 +128,8 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) { u_char status, *pos, *start, *p, *tmp; size_t len, tmp_len; - ngx_str_t host, location; - ngx_uint_t i, port; + ngx_str_t host, location, tokens; + ngx_uint_t i, port, server_tokens; ngx_list_part_t *part; ngx_table_elt_t *header; ngx_connection_t *fc; @@ -229,8 +229,38 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); + server_tokens = clcf->server_tokens; + if (r->headers_out.server == NULL) { - len += 1 + (clcf->server_tokens ? nginx_ver_len : sizeof(nginx)); + + if (server_tokens == 0) { + len += 1 + sizeof(nginx); + ngx_str_set(&tokens, "nginx"); + + } else if (server_tokens == 1) { + len += 1 + nginx_ver_len; + ngx_str_set(&tokens, NGINX_VER); + + } else { + if (ngx_http_complex_value(r, &clcf->server_tokens_value, &tokens) + != NGX_OK) + { + return NGX_ERROR; + } + + if (tokens.len == 3 + && ngx_strncmp(tokens.data, "off", 3) == 0) + { + server_tokens = 0; + len += 1 + sizeof(nginx); + ngx_str_set(&tokens, "nginx"); + + } else if (tokens.len) { + server_tokens = 1; + len += 1 + nginx_ver_len; + ngx_str_set(&tokens, NGINX_VER); + } + } } if (r->headers_out.date == NULL) { @@ -434,14 +464,17 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) pos = ngx_sprintf(pos, "%03ui", r->headers_out.status); } - if (r->headers_out.server == NULL) { + if (r->headers_out.server == NULL && tokens.len) { ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0, - "http2 output header: \"server: %s\"", - clcf->server_tokens ? NGINX_VER : "nginx"); + "http2 output header: \"server: %V\"", + &tokens); *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX); - if (clcf->server_tokens) { + if (server_tokens == 0) { + pos = ngx_cpymem(pos, nginx, sizeof(nginx)); + + } else { if (nginx_ver[0] == '\0') { p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER, sizeof(NGINX_VER) - 1, tmp); @@ -449,9 +482,6 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) } pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len); - - } else { - pos = ngx_cpymem(pos, nginx, sizeof(nginx)); } } |
