1. header_filter_by_lua 'ngx.header["server"] = ""'
的作用
当你使用 header_filter_by_lua
来设置 ngx.header["Server"]
为一个空字符串时,它只会修改响应头中的 Server
字段。具体来说,它仅仅清除了响应头中的 Server
字段,防止该字段在响应中显示。
示例:
header_filter_by_lua 'ngx.header["Server"] = ""';
- 作用:清除
Server
响应头,防止Server
信息(如版本号)泄露。 - 限制:它只会影响响应头,而不会影响响应体中的任何内容。如果错误页面(例如 404 页面)包含
Server
信息(如 Nginx 的版本号),那么这些信息仍然会被渲染和显示。
2. server_tokens off;
的作用
server_tokens off;
是一个 Nginx 原生的配置指令,它不仅影响响应头中的 Server
字段,还影响响应体的内容,尤其是在生成错误页面时。启用 server_tokens off;
会完全禁止 Nginx 在响应中暴露版本信息,包括:
- 响应头中的
Server
字段:它会将Server
字段的值从nginx/1.18.0
变为nginx
或完全为空,具体取决于配置。 - 错误页面:如果返回错误(例如 404 或 500),Nginx 默认会在错误页面中包含版本信息。启用
server_tokens off;
后,错误页面也不会显示 Nginx 的版本号。
示例:
server_tokens off;
- 作用:禁止显示
Server
头部中的版本号,同时还会影响 错误页面 的显示,不再包含版本号。 - 影响范围:它不仅影响响应头,还会影响 Nginx 错误页面 的内容,避免泄露版本信息。
3.主要区别:
特性 |
|
|
修改响应头 | 只修改响应头中的 | 修改响应头中的 |
修改响应体 | 不修改响应体内容 | 还会修改错误页面内容,隐藏版本信息 |
影响范围 | 只影响响应头 | 影响响应头和 Nginx 错误页面的内容 |
适用场景 | 需要灵活修改某些特定头部字段时使用 | 全面关闭 Nginx 版本信息的暴露,增强安全性 |
4.举例说明:
4.1 配置 header_filter_by_lua
:
server {
listen 80;
server_name example.com;
location / {
header_filter_by_lua '
ngx.header["Server"] = "";
';
}
}
- 效果:请求响应头中的
Server
字段将被清空,但如果返回错误页面,错误页面中仍可能包含 Nginx 版本信息。
4.2 配置 server_tokens off;
:
server {
listen 80;
server_name example.com;
server_tokens off;
location / {
# 正常配置
}
}
- 效果:响应头中的
Server
字段将显示为nginx
(或完全没有Server
字段),而且即使是错误页面(如 404、500 等),也不会显示版本信息。
5.总结:
header_filter_by_lua 'ngx.header["Server"] = ""'
:只修改响应头中的Server
字段,不影响错误页面。server_tokens off;
:不仅修改响应头中的Server
字段,还会影响 Nginx 错误页面内容,完全隐藏 Nginx 版本信息,从而提高安全性。