有一个隐藏版本的选项,因此它只会显示nginx,但有没有办法隐藏它,所以它不会显示任何内容或更改标题?

有帮助吗?

解决方案

与Apache一样,这是对源代码的快速编辑和重新编译。来自 Calomel.org

  

服务器:字符串是标题   被送回客户告诉   他们是什么类型的http服务器   运行,可能是什么版本。   此字符串由类似的地方使用   Alexia和Netcraft收集   关于有多少和有多少的统计数据   Web服务器的类型是活的   互联网。为了支持作者和   我们推荐的Nginx统计数据   保持这个字符串不变。但对于   安全你可能不希望别人   知道你在跑什么,你可以   在源代码中更改此内容。编辑   源文件   <代码>的src / HTTP / ngx_http_header_filter_module.c   看看第48和49行。你可以   将String更改为您的任何内容   想。

## 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头做各种运行时黑魔法。

其他提示

如果您使用nginx代理后端应用程序并希望后端发布自己的 Server:标头而不用nginx覆盖它,那么您可以进入服务器{&#8230;} 节并设置:

proxy_pass_header Server;

这将说服nginx单独保留该标题,而不是重写后端设置的值。

最后一次更新是前一段时间,所以这就是我在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。

简单,编辑/etc/nginx/nginx.conf并从

中删除评论
#server_tokens off;

搜索 http 部分。

它非常简单:将这些行添加到服务器部分:

server_tokens off;
more_set_headers 'Server: My Very Own Server';

有一个特殊模块: http://wiki.nginx.org/NginxHttpHeadersMoreModule

  

此模块允许您添加,设置或清除您指定的任何输出或输入标题。

     

这是标准标题的增强版本模块,因为它提供了更多实用程序,如重置或清除“内置标头”等。例如 Content-Type Content-Length Server

     

它还允许您在修改输出标头时使用 -s 选项指定可选的HTTP状态代码条件,并使用 -t 选项指定可选的内容类型条件使用 more_set_headers more_clear_headers 指令......

安装Nginx Extras

sudo apt-get update
sudo apt-get install nginx-extras

通过在nginx.conf中添加以下两行(在http部分下),可以从响应中删除服务器详细信息

more_clear_headers Server;
server_tokens off;

如果您只是将标题更改为另外五个字母或更少的字符串,那么您可以简单地修补二进制文件。

sed -i 's/nginx\r/thing\r/' `which nginx`

作为一种解决方案,它具有一些显着的优势。也就是说,您可以允许包管理器处理您的nginx版本控制(因此,不会从源代码编译),即使您的发行版没有nginx-extras,也不需要担心任何其他版本像nginx-extras这样易受攻击的代码。

当然,您还需要设置 server_tokens off 选项,以隐藏版本号,或修补格式字符串。

我说“五个字母或更少”字母。因为你当然可以随时取代:

  

nginx的\ r \ 0

  

鲍勃\ r \ 0 \ r \ 0

保留最后两个字节。

如果你真的想要超过五个字符,你会想要打开server_tokens,并替换(略长一些)格式字符串,尽管格式字符串的长度对该长度有一个上限 - 1 (回车)。

...如果上述任何一个对您没有意义,或者您之前从未打过二进制文件,那么您可能希望远离这种方法。

唯一的方法是修改文件src / http / ngx_http_header_filter_module.c。我将第48行的nginx更改为不同的字符串。

您可以在nginx配置文件中执行的操作是将 server_tokens 设置为off。这将阻止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`

根据nginx 文档,它支持自定义值甚至是排除:

Syntax: server_tokens on | off | build | string;

但遗憾的是只有商业订阅

  

此外,作为我们商业订阅的一部分,从   版本1.9.13错误页面上的签名和&#8220;服务器&#8221;响应   可以使用字符串显式设置标头字段值   变量。空字符串禁用&#8220;服务器&#8221;   字段。

我知道帖子有点陈旧,但我找到了一个简单易用的解决方案,无需从源代码编译nginx即可用于基于Debian的分发。

首先安装nginx-extras包

  

sudo apt install nginx-extras

然后通过编辑nginx.conf并在服务器块中添加以下行来加载nginx http headers more模块

  

load_module modules / ngx_http_headers_more_filter_module.so;

一旦完成,您将可以访问more_set_headers和more_clear_headers指令。

您是否在询问响应中的服务器标头值?您可以尝试使用add_header指令进行更改,但我不确定它是否可行。 http://wiki.codemongers.com/NginxHttpHeadersModule

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top