nginx自定义header中的server字段

二维码
| May 02, 2019 | 原创

在某些情况下,可能是处于安全的考虑,又或许是因为别的原因(比如装x),我们有修改Nginx Header 响应头中的Server 字段的需求,比如像Google这样(但可能Google确实不是Nginx服务器,鬼知道呢):

那么,具体我们该如何修 Server 字段的值呢?大概需要修改如下几个地方(由于修改的是源码文件,不同版本略有差异,如下文件可能因版本变化而更改)。

1. 修改 src/core/nginx.h 文件:

#define NGINX_VERSION      "1.14.2"
#define NGINX_VER          "nginx/" NGINX_VERSION

#define NGINX_VAR          "NGINX"

2. 修改 src/http/ngx_http_header_filter_module.c

static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: nginx" NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: nginx" NGINX_VER_BUILD CRLF;

3. 修改 src/http/ngx_http_special_response.c 文件

此文件包含了nginx的默认错误页面提示,例如404、500等错误页面:

static u_char ngx_http_error_tail[] = "<hr><center>nginx</center>" CRLF

4. Nginx的FastCGI配置文件fastcgi.conf

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

5. Nginx http2 /src/http/v2/ngx_http_v2_filter_module.c 文件

static const u_char nginx[5] = "\x84\xaa\x63\x55\xe7";

对于前四个地方的修改是很容易的,但最后一个文件的修改却不是那么容易,因为此处的内容是经过 hpack 编码后的压缩字符,如果不更换此处内容,那么当网站开启 http2 协议后,你会发觉 server 字段的修改不起作用。

此处我们需要提供使用 hpack 算法编码的字符串,而不能使用明文字符,这里提供给大家一个在线生成工具:Nginx hpack加密工具,包你无忧。

最后,如此直接暴力的修改源文件,并非是上上之策,最好是使用 diff 工具,生成补丁文件最佳,此外,如果不希望Nginx显示带版本号 Server,那么可以在配置文件中设置如下参数:

server_tokens off;