有一个隐藏版本的选项,因此它只会显示 nginx,但是有没有办法隐藏它,所以它不会显示任何内容或更改标题?
14 回答
如果您正在使用 nginx 代理后端应用程序并希望后端广告自己的Server:
标头而不被 nginx 覆盖,那么您可以进入您的server {…}
节内部并设置:
proxy_pass_header Server;
这将说服 nginx 不理会该标头,而不是重写后端设置的值。
上次更新是在不久前,所以这对我来说在 Ubuntu 上有用:
sudo apt-get update
sudo apt-get install nginx-extras
然后将以下两行添加到通常位于 /etc/nginx/nginx.conf的http
部分中: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
.
与 Apache 一样,这是对源代码的快速编辑并重新编译。来自Calomel.org:
Server: 字符串是发送回客户端的标头,以告诉他们您正在运行什么类型的 http 服务器以及可能是什么版本。Alexia 和 Netcraft 等地方使用此字符串来收集有关 Internet 上存在的 Web 服务器数量和类型的统计信息。为了支持 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 提出建议,指出一个新选项,用分叉的HttpHeadersMoreModule替换 Nginx 的标准HttpHeadersModule。重新编译标准模块仍然是快速修复,如果您想使用标准模块并且不会经常更改服务器字符串,那么它是有意义的。但是,如果您想要更多,HttpHeadersMoreModule 是一个强大的项目,它可以让您使用 HTTP 标头执行各种运行时黑魔法。
这很简单:将这些行添加到服务器部分:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
简单,编辑 /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;
有一个特殊的模块:http ://wiki.nginx.org/NginxHttpHeadersMoreModule
此模块允许您添加、设置或清除您指定的任何输出或输入标头。
这是标准标头模块的增强版本,因为它提供了更多实用程序,例如重置或清除“内置标头”,如
Content-Type
、Content-Length
和Server
.它还允许您使用该选项指定可选的 HTTP 状态代码标准,
-s
并使用该选项指定可选的内容类型标准,同时使用more_set_headers和more_clear_headers指令-t
修改输出标头...
如果您可以将标头更改为另一个五个字母或更少的字符串,您可以简单地修补二进制文件。
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(对于回车)。
...如果上述方法对您没有意义,或者您以前从未修补过二进制文件,那么您可能希望远离这种方法。
根据 nginx文档,它支持自定义值甚至排除:
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`
我知道这篇文章有点老了,但我找到了一个简单的解决方案,它可以在基于 Debian 的发行版上运行,而无需从源代码编译 nginx。
首先安装 nginx-extras 包
sudo apt install nginx-extras
然后通过编辑 nginx.conf 并在 server 块中添加以下行来加载 nginx http headers more 模块
load_module 模块/ngx_http_headers_more_filter_module.so;
完成后,您将可以访问 more_set_headers 和 more_clear_headers 指令。
Nginx-extra 包现在已弃用。
因此,以下内容现在对我有用,因为我尝试安装各种包 more_set_headers 'Server: My Very Own Server';
您只需执行以下操作,就不会发回服务器或版本信息
server_tokens '';
如果您只想删除版本号,这可行
server_tokens off;
您是在询问响应中的 Server 标头值吗?您可以尝试使用 add_header 指令更改它,但我不确定它是否会起作用。http://wiki.codemongers.com/NginxHttpHeadersModule