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 版本信息,从而提高安全性。









