nginx隐藏版本号信息
我们平常使用nginx作为代理服务器的时候,在返回请求内容的时候,一般都会带着nginx的版本号,比如请求不存在的路径返回的404错误页面:

这里我们可以直接看到服务器使用的代理软件与版本号,会造成信息泄露。为了提高服务器的安全性,减少攻击面,一般情况下我们会要求隐藏这些信息。
下面记录一下隐藏版本号的操作过程,供参考。
1.修改配置隐藏nginx版本号信息
在配置文件http块中加入下面参数配置:
server_tokens off; 
重载nginx配置文件:
nginx -s reload 访问一下测试页面:

可以看到版本号已经没有了,但是还会返回使用的server是nginx,下面我们需要把这个信息也隐藏掉。
2.修改源码隐藏响应头server信息
隐藏服务信息就需要修改源码了,我们先去下载一个源码包,nginx源码下载地址:https://nginx.org/en/download.html

这里我们选择nginx-1.26.3.tar.gz版本下载使用,下载完成后解压到服务器:

修改src/http/ngx_http_header_filter_module.c源码文件:
vi 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_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF; 
可以将其返回修改为空或者其他自定义的值,这里我们修改为unknow:
static u_char ngx_http_server_string[] = "Server: unkonw" CRLF;
static u_char ngx_http_server_full_string[] = "Server: unkonw" NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: unkonw" NGINX_VER_BUILD CRLF; 
保存后开始编译nginx:
cd /nginx-1.26.3/
./configure --prefix=/usr/sbin/nginx
make 如果编译报错依赖问题,根据提示安装一下编译需要依赖的包:
yum install libxml2-devel libxslt-devel gd-devel perl-devel perl-ExtUtils-Embed perl-devel gperftools-devel 编译完成后部署重新启动(编译部署步骤可以参考:生产环境nginx版本升级),再访问测试页面:

我们发现虽然响应头的server内容已经变成我们设置的unkonw了,但是404页面还是会返回nginx内容,接下来我们将这里也修改一下。
3.修改404错误页面模板
nginx源码中错误页面模板在src/http/ngx_http_special_response.c文件中,编辑该文件:
vi src/http/ngx_http_special_response.c 找到u_char ngx_http_error_tail:
static u_char ngx_http_error_tail[] =
"
nginx " CRLF
"