怎样在Nginx下安装 ngx_http_headers_more_filter_module

2019年10月14日 | 分类: 【技术】

【介绍】

headers-more-nginx-module 模块用于添加、修改或清除 请求/响应头,该模块不是nginx自带的,默认不包含该模块,需要另外安装。

下载:https://github.com/openresty/headers-more-nginx-module

文档:https://docs.nginx.com/nginx/admin-guide/dynamic-modules/headers-more/

参考:https://serverfault.com/questions/214242/can-i-hide-all-server-os-info
参考:https://stackoverflow.com/questions/24594971/how-to-changehide-the-nginx-server-signature

参考:https://www.cnblogs.com/52fhy/p/10166352.html
参考:https://www.cnblogs.com/52fhy/p/10166333.html

参考:https://www.getpagespeed.com/server-setup/nginx/how-to-remove-the-server-header-in-nginx
参考:https://www.cnblogs.com/linkenpark/p/7283177.html

【安装】

下载源码到 nginx 源代码目录:

cd /root/nginx-1.17.4 && git clone --depth 1 https://github.com/openresty/headers-more-nginx-module.git

nginx编译时可以通过 –add-module 添加 modsecurity 模块:

cd /root/nginx-1.17.4 && ./configure --add-dynamic-module=./headers-more-nginx-module && make modules && cp objs/ngx_http_headers_more_filter_module.so /usr/local/nginx/modules/

在 nginx 配置模块加载,编辑 /usr/local/nginx/conf/nginx.conf ,在 main 标签中添加:

load_module modules/ngx_http_headers_more_filter_module.so;

在 Server 标签段内加上:

more_set_headers 'Server: xOS';

重启 nginx ,再看 Response Headers 里面 Server 信息,成功显示:server: xOS

实证成功!

【配置】

该模块主要有4个指令:

1. more_set_headers 用于添加、修改、清除响应头
2. more_clear_headers 用于清除响应头
3. more_set_input_headers 用于添加、修改、清除请求头
4. more_clear_input_headers 用于清除请求头

 # set the Server output header
 more_set_headers 'Server: my-server';

 # set and clear output headers
 location /bar {
     more_set_headers 'X-MyHeader: blah' 'X-MyHeader2: foo';
     more_set_headers -t 'text/plain text/css' 'Content-Type: text/foo';
     more_set_headers -s '400 404 500 503' -s 413 'Foo: Bar';
     more_clear_headers 'Content-Type';

     # your proxy_pass/memcached_pass/or any other config goes here...
 }

 # set output headers
 location /type {
     more_set_headers 'Content-Type: text/plain';
     # ...
 }

 # set input headers
 location /foo {
     set $my_host 'my dog';
     more_set_input_headers 'Host: $my_host';
     more_set_input_headers -t 'text/plain' 'X-Foo: bah';

     # now $host and $http_host have their new values...
     # ...
 }

 # replace input header X-Foo *only* if it already exists
 more_set_input_headers -r 'X-Foo: howdy';