【发布时间】:2010-09-19 18:16:06
【问题描述】:
有一个隐藏版本的选项,所以它只会显示 nginx,但是有没有办法也隐藏它,所以它不会显示任何内容或更改标题?
【问题讨论】:
-
顺便说一句,要隐藏 nginx 版本,您需要设置 'server_tokens off'。
-
如果您关心从标头中删除 nginx,您可能还希望将其从重定向和错误页面中删除。
标签: nginx http-headers
有一个隐藏版本的选项,所以它只会显示 nginx,但是有没有办法也隐藏它,所以它不会显示任何内容或更改标题?
【问题讨论】:
标签: nginx http-headers
如果您使用 nginx 代理后端应用程序并希望后端宣传其自己的 Server: 标头而不被 nginx 覆盖,那么您可以进入您的 server {…} 节并设置:
proxy_pass_header Server;
这将说服 nginx 不理会该标头,而不是重写后端设置的值。
【讨论】:
self.set_header("Server", "Custom name")
上一次更新是在不久前,所以这就是我在 Ubuntu 上的工作:
sudo apt-get update
sudo apt-get install nginx-extras
然后将以下两行添加到nginx.conf的http部分,该部分通常位于/etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
另外,别忘了用sudo service nginx restart重启nginx。
【讨论】:
more_set_headers 'Server: ';
sudo apt-get install nginx-extras 然后在 nginx.conf 中转到 http 部分并添加这两行 server_tokens off; more_clear_headers Server;
与 Apache 一样,这是对源代码的快速编辑和重新编译。来自Calomel.org:
服务器:字符串是标头 被发回给客户告诉 他们是什么类型的 http 服务器 运行,可能是什么版本。 这个字符串被像这样的地方使用 Alexia 和 Netcraft 收集 关于多少和什么的统计 网络服务器的类型在 互联网。为了支持作者和 我们推荐的 Nginx 统计信息 保持这个字符串不变。但对于 您可能不希望人们使用的安全性 知道你在跑什么,你可以 在源代码中更改它。编辑 源文件
src/http/ngx_http_header_filter_module.c看看第 48 和 49 行。你可以 将字符串更改为您的任何内容 想要。
## vi src/http/ngx_http_header_filter_module.c (lines 48 and 49)
static char ngx_http_server_string[] = "Server: MyDomain.com" CRLF;
static char ngx_http_server_full_string[] = "Server: MyDomain.com" CRLF;
2011 年 3 月编辑: 支持 Flavius 指出一个新选项,将 Nginx 的标准 HttpHeadersModule 替换为分叉的 HttpHeadersMoreModule。重新编译标准模块仍然是快速修复,如果您想使用标准模块并且不会经常更改服务器字符串,那么它是有意义的。但是,如果您想要更多,HttpHeadersMoreModule 是一个强大的项目,它可以让您使用 HTTP 标头执行各种运行时黑魔法。
【讨论】:
r->headers_out.server 的 if 块。
很简单:将这些行添加到服务器部分:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
【讨论】:
nginx-extra 来获取该模块。
简单,编辑 /etc/nginx/nginx.conf 并删除注释
#server_tokens off;
搜索 http 部分。
【讨论】:
安装 Nginx 附加功能
sudo apt-get update
sudo apt-get install nginx-extras
可以通过在 nginx.conf 中添加以下两行(在 http 部分下)从响应中删除服务器详细信息
more_clear_headers Server;
server_tokens off;
【讨论】:
yum install nginx-extras 不起作用 - 我想这适用于带有 apt-get 的 Debia/Ubuntu 等。)
有一个特殊的模块:http://wiki.nginx.org/NginxHttpHeadersMoreModule
此模块允许您添加、设置或清除您指定的任何输出或输入标头。
这是标准headers 模块的增强版本,因为它提供了更多实用程序,例如重置或清除“内置标头”,例如
Content-Type、Content-Length和Server。它还允许您使用
-s选项指定可选的HTTP 状态代码标准,并使用-t选项指定可选的内容类型标准,同时使用more_set_headers 和more_clear_headers 指令修改输出标头。 .
【讨论】:
--add-module=/path-to-headers-more-nginx-module编译nginx
如果您可以将标题更改为另一个五个字母或更少字母的字符串,您可以简单地修补二进制文件。
sed -i 's/nginx\r/thing\r/' `which nginx`
作为一种解决方案,它具有一些显着的优势。也就是说,即使 nginx-extras 不适用于您的发行版,您也可以允许包管理器处理您的 nginx 版本控制(因此,不从源代码编译),并且您无需担心任何额外的像 nginx-extras 这样的代码易受攻击。
当然,您还需要设置选项server_tokens off,以隐藏版本号,或者也修补该格式字符串。
我说“五个字母或更少”是因为您当然可以随时替换:
nginx\r\0
与
鲍勃\r\0\r\0
保持最后两个字节不变。
如果您确实需要五个以上的字符,则需要保留 server_tokens 并替换(稍长)格式字符串,尽管格式字符串的长度再次对该长度施加了上限 - 1 (用于回车)。
...如果上述方法对您没有意义,或者您以前从未修补过二进制文件,那么您可能希望远离这种方法。
【讨论】:
sed 命令,`which nginx` 部分返回二进制文件的路径,sed 命令执行字节替换。
nginx 以使更改生效,我不会感到惊讶。说了这么多?我敦促您不要使用其他答案之一。如果您对我所说的所有内容都不熟悉,并且您不知道 /etc 目录的用途,那么像这样的 hack 有点危险。
根据 nginx documentation 它支持自定义值甚至排除:
Syntax: server_tokens on | off | build | string;
但遗憾的是只有商业订阅:
此外,作为我们商业订阅的一部分,从 版本 1.9.13 错误页面上的签名和“服务器”响应 可以使用字符串显式设置标头字段值 变量。空字符串禁用“服务器”的发射 字段。
【讨论】:
唯一的方法是修改文件 src/http/ngx_http_header_filter_module.c 。我将第 48 行的 nginx 更改为不同的字符串。
您可以在 nginx 配置文件中将 server_tokens 设置为关闭。这将阻止 nginx 打印版本号。
要检查一下,试试 curl -I http://vurbu.com/ | grep 服务器
它应该返回
Server: Hai
【讨论】:
在阅读了 Parthian Shot 的答案后,我深入研究了 /usr/sbin/nginx 二进制文件。然后我发现该文件包含这三行。
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
基本上前两个用于server_tokens on; 指令(包括服务器版本)。
然后我更改搜索条件以匹配二进制文件中的那些行。
sed -i 's/Server: nginx/Server: thing/' `which nginx`
深入挖掘后发现nginx产生的错误信息也包含在这个文件中。
<hr><center>nginx</center>
一共有三个,一个不带版本,两个带版本。所以我运行以下命令来替换错误消息中的 nginx 字符串。
sed -i 's/center>nginx/center>thing/' `which nginx`
【讨论】:
/usr/sbin 文件夹中执行的第一个命令会产生以下结果:sed: can't read is: No such file or directory
我知道这篇文章有点老了,但我找到了一个简单的解决方案,它可以在基于 Debian 的发行版上运行,而无需从源代码编译 nginx。
首先安装 nginx-extras 包
sudo apt install nginx-extras
然后通过编辑 nginx.conf 并在 server 块中添加以下行来加载 nginx http headers more 模块
加载模块模块/ngx_http_headers_more_filter_module.so;
完成后,您将可以访问 more_set_headers 和 more_clear_headers 指令。
【讨论】:
Nginx-extra 包现已弃用。
因此,当我尝试安装各种软件包时,以下内容现在对我有用 more_set_headers '服务器:我自己的服务器';
您只需执行以下操作,就不会发回任何服务器或版本信息
server_tokens '';
如果你只是想删除版本号,这可行
server_tokens off;
【讨论】:
nginx: [emerg] invalid value "suckit" in /etc/nginx...
您是在询问响应中的 Server 标头值吗?您可以尝试使用 add_header 指令更改它,但我不确定它是否会起作用。 http://wiki.codemongers.com/NginxHttpHeadersModule
【讨论】: