源码安装 nginx 时需修改 nginx.h 和 ngx_http_header_filter_module.c 两处硬编码字符串,分别替换 nginx_version、nginx_ver 及三个 server 相关静态数组,再 configure、make、make install,并配置 server_tokens off 以彻底隐藏版本信息。

想在源码安装 Nginx 时自定义响应头里的 Server 字段(即 banner),不能靠配置文件实现,必须修改源码并重新编译。核心是替换两处硬编码的字符串:服务器名称和版本标识。
修改 nginx.h 定义的版本与服务名
进入解压后的 Nginx 源码目录,编辑 src/core/nginx.h:
- 找到
#define NGINX_VERSION "1.24.0"—— 改为你想要的版本号(如"2.0"或留空) - 找到
#define NGINX_VER "nginx/" NGINX_VERSION—— 改为自定义服务名,例如#define NGINX_VER "MyWebServer/" NGINX_VERSION - 若希望完全去掉版本号,可将
NGINX_VERSION替换为空字符串,再调整NGINX_VER为纯名称,如#define NGINX_VER "MyWebServer"
修改 header 过滤模块中的 server 字符串
编辑 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;- 全部改为统一的自定义值,例如:
static u_char ngx_http_server_string[] = "Server: MyWebServer" CRLF;static u_char ngx_http_server_full_string[] = "Server: MyWebServer" CRLF;static u_char ngx_http_server_build_string[] = "Server: MyWebServer" CRLF;
配置、编译与安装
确保已安装必要依赖(如 pcre-devel、openssl-devel、zlib-devel),然后执行:
- 运行
./configure,带上你所需的模块和安装路径,例如:--prefix=/opt/mynginx --with-http_ssl_module --with-http_gzip_static_module - 执行
make编译,再执行sudo make install - 启动新安装的 Nginx:
/opt/mynginx/sbin/nginx - 用
curl -I http://localhost检查响应头,确认Server: MyWebServer已生效
额外建议:关闭版本号输出
即使改了 banner,若配置中未禁用 server_tokens,某些错误页面仍可能泄露信息:
- 在
nginx.conf的http或server块中添加:server_tokens off; - 执行
/opt/mynginx/sbin/nginx -s reload使配置生效 - 该设置只隐藏版本号,不改变 server 名称;真正隐藏或替换名称仍需源码修改











