从Nginx源码出发-隐藏响应头的Server版本号等信息

需求

当我们使用http/https请求时, nginx 会在请求的response里面的header加入Server: nginx:1.18 信息, 如果可以隐藏, 就不会被别人知道, 我用的是哪款web服务器, 或哪个版本.

例如

  • 新浪网:
    Server: nginx / Server: WeiBo/LB

  • 开源中国:
    Server:Tengine / server: marco/2.13

  • segmentfault
    没有返回Server!/ server: Tengine

修改 nginx 源码并编译

准备工作

  1. 下载 nginx 源码, 本文使用的是 nginx-1.18.0, 下载链接
  2. 下载 zlib 源码, 下载链接, 这个是与 gzip 压缩相关的
  3. 下载 pcre, 下载链接下载地址2, 这个是与url正则匹配相关的. 注意此处不能使用pcre2, 否则可能会报如下错误:
    在这里插入图片描述

解压

解压如下:
在这里插入图片描述

修改源码

主要修改两个部分

  1. 修改 src/core/nginx.h
    在这里插入图片描述
    NGINX_VER 修改你想要的.

  2. 修改 src/http/ngx_http_header_filter_module.c
    在这里插入图片描述
    ngx_http_server_string 修改掉, 如: "Server: nginx" CRLF 直接修改成 "Server: haha" CRLF 或者修改成 ngx_http_server_full_string 一致也可以, 这样就不会受配置文件里的 server_tokens off; 配置影响了.

  3. 修改 ./src/http/ngx_http_special_response.c
    此文件主要是404等错误页面时响应, 同样可以进行定制.
    在这里插入图片描述
    主要是将 ngx_http_error_tail 修改成自己想要的.或者修改成 ngx_http_error_full_tail 一致也可以. 这样就不会受配置文件里的 server_tokens off; 配置影响了.

配置并编译

./configure \
	--prefix=/opt/nginx \
	--with-http_ssl_module \
	--with-stream \
	--with-pcre=/root/dev/nginx/pcre-8.40 \
	--with-zlib=/root/dev/nginx/zlib-1.2.11

说明:

  1. --prefix 安装到哪个目录, 默认是安装到 /usr/local/nginx
  2. --with-http_ssl_module 支持 https, 要不然证书就无法使用. 影响与https相关的指令ssl_protocols,ssl_ciphers
  3. --with-pcre 指定 pcre 源码目录. 影响url正则相关
  4. --with-zlib 指定 zlib 源码目录. 影响gzip解压缩相关
  5. 其他配置可以参考./configure --help

为啥要加 zlib(与gzip压缩相关) 或 pcre(与正则相关), 本次系统使用的是ubuntu20.0, 必须要有, 否则报错:

  1. 没有 zlib 报错:
    在这里插入图片描述

  2. 没有pcre报错:
    在这里插入图片描述

  3. 加入之后运行配置检查, 没有报错, 则算是正常, 如下:
    在这里插入图片描述

  4. 开始 make 进行编译

可能会遇到的错误:
在这里插入图片描述
说明缺少 g++ 编译器相关的. 安装

sudo apt install g++

或直接安装 build-essential, 因为 build-essential 包含 g++

sudo apt install build-essential

如果出现
在这里插入图片描述

则安装一下openssl

apt-get install openssl libssl-dev

安装完成后, 断续编译 nginx, 编译的过程可能会比较慢, 等会结果如下, 没有报错, 则编译完成.
在这里插入图片描述
再执行安装

./make install

安装结束

启动

/opt/nginx/sbin/nginx

在页面中打开地址, 并查看响应头信息
在这里插入图片描述
server 标识已被修改.

定制的错误页面.
在这里插入图片描述

如果想要其他的效果, 完全可以修改源码进行定制.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值