Nginx取消显示nginx版本信息

背景

  • Nginx默认会在响应头中返回Server信息,将Nginx的版本和服务器的信息展示出来,这玩意儿还是有风险的,所以希望能够修改掉这个Server的字段信息,亦或是直接不显示这个字段的信息,因此遇到了headers-more-nginx-module
  • 提供两种修改方式:
    1. 去除响应头的Server显示
    2. 通过headers-more-nginx-module修改响应头

配置方式

去除server显示

打开nginx.conf配置文件,在http模块(或者对应的server模块)中添加如下内容

1
2
# off表示关闭响应头部的server版本显示,on则相反
server_tokens off;

headers-more-nginx-module修改响应头

  1. 下载headers-more-nginx-module版本的包:https://github.com/openresty/headers-more-nginx-module/releases

    1
    2
    3
    4
    5
    6
    7
    # 根据自己的需要下载对应的版本包
    wget https://github.com/openresty/headers-more-nginx-module/archive/v0.33.tar.gz
    tar -zxvf v0.33.tar.gz

    # 下载nginx的源码。必须与已安装的nginx保持一致
    wget http://nginx.org/download/nginx-1.10.0.tar.gz
    tar xzvf nginx-1.10.0.tar.gz
  2. 到nginx源码的目录,进行编译

    1
    2
    3
    4
    5
    6
    7
    # 查看已有的nginx编译时所带的参数
    nginx -V

    # 编译时,添加参数:--add-dynamic-module=/path/to/the/headers-more-nginx-module
    cd nginx-1.10.0
    ./configure [省略参数] --add-dynamic-module=/home/test/Desktop/wuxiang/headers-more-nginx-module/
    make
  3. 编译完毕后,将objs文件夹下生成的的ngx_http_headers_more_filter_module.so复制到/usr/lib/nginx/modules/目录下

    1
    2
    3
    cd objs
    # 这个路径根据需要自己设置,导入模块的时候自己注意路径即可
    sudo cp ngx_http_headers_more_filter_module.so /usr/lib/nginx/modules/
  4. 打开nginx.conf配置文件,在http模块(或者对应的server模块)中添加如下内容:

    1
    2
    3
    4
    5
    # 导入之前编译好的模块
    load_module /path/to/your/modules/ngx_http_headers_more_filter_module.so;

    # 然后在http模块中配置Server信息,或者在server模块中配置也可
    more_set_headers "Server: hello";
  5. 配置完成后,重启nginx服务,然后打开前台看看响应头是否有变化

    1
    2
    sudo nginx -t
    sudo service nginx -s reload

参考文献

官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens

安装参考:https://github.com/openresty/headers-more-nginx-module#installation