有一个隐藏版本的选项,因此它只会显示nginx,但有没有办法隐藏它,所以它不会显示任何内容或更改标题?
答案 0 :(得分:128)
如果您使用nginx代理后端应用程序并希望后端在没有nginx覆盖的情况下宣传自己的Server:
标头,那么您可以进入server {…}
节并且设置:
proxy_pass_header Server;
这将说服nginx单独保留该标题,而不是重写后端设置的值。
答案 1 :(得分:67)
最后一次更新是前一段时间,所以这就是我在Ubuntu上的作用:
sudo apt-get update
sudo apt-get install nginx-extras
然后将以下两行添加到http
的{{1}}部分,该部分通常位于/etc/nginx/nginx.conf:
nginx.conf
另外,请勿忘记使用sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
重新启动nginx。
答案 2 :(得分:56)
与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道具指出一个新选项,用分叉的HttpHeadersModule替换Nginx的标准HttpHeadersMoreModule。重新编译标准模块仍然是快速修复,如果您想使用标准模块并且不会经常更改服务器字符串,则有意义。但是如果你想要更多,那么HttpHeadersMoreModule是一个强大的项目,你可以用你的HTTP头做各种运行时黑魔法。
答案 3 :(得分:37)
简单,编辑/etc/nginx/nginx.conf并从
中删除评论#server_tokens off;
搜索 http 部分。
答案 4 :(得分:31)
这很简单:将这些行添加到服务器部分:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
答案 5 :(得分:25)
有一个特殊模块:http://wiki.nginx.org/NginxHttpHeadersMoreModule
此模块允许您添加,设置或清除您指定的任何输出或输入标题。
这是标准headers模块的增强版,因为它提供了更多实用程序,例如重置或清除“内置标头”,例如
Content-Type
,Content-Length
和Server
。它还允许您使用
-s
选项指定可选的HTTP状态代码条件,使用-t
选项指定可选的内容类型条件,同时使用more_set_headers修改输出标头more_clear_headers指令......
答案 6 :(得分:15)
如果您只是将标题更改为另外五个字母或更少的字符串,那么您可以简单地修补二进制文件。
controller: function ( $scope, $element, $attrs ) {
var vsTemplate = $templateCache.get($attrs.templateUrl)
$scope.data= $compile(vsTemplate)($scope)
},
link: function (scope, element, attrs, ctrls) {
dialogs.notify('Errors Summary', $scope.data)
}
作为一种解决方案,它具有一些显着的优势。也就是说,您可以允许包管理器处理您的nginx版本控制(因此,不会从源代码编译),即使您的发行版没有nginx-extras,也不需要担心任何其他版本像nginx-extras这样易受攻击的代码。
当然,您还需要设置选项sed -i 's/nginx\r/thing\r/' `which nginx`
,以隐藏版本号,或修补格式字符串。
我说“五个字母或更少”,因为你当然可以随时取代:
nginx的\ r \ 0
与
鲍勃\ r \ 0 \ r \ 0
保留最后两个字节。
如果你真的想要超过五个字符,你会想要打开server_tokens,并替换(略长一些)格式字符串,尽管格式字符串的长度对该长度有一个上限 - 1 (回车)。
...如果上述任何一个对您没有意义,或者您之前从未打过二进制文件,那么您可能希望远离这种方法。
答案 7 :(得分:15)
安装Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
通过在nginx.conf中添加以下两行(在http部分下),可以从响应中删除服务器详细信息
more_clear_headers Server;
server_tokens off;
答案 8 :(得分:2)
唯一的方法是修改文件src / http / ngx_http_header_filter_module.c。我将第48行的nginx更改为不同的字符串。
您可以在nginx配置文件中执行的操作是将 server_tokens 设置为off。这将阻止nginx打印版本号。
要检查一下,请尝试 curl -I http://vurbu.com/ | grep服务器
它应该返回
Server: Hai
答案 9 :(得分:1)
在阅读了《帕提亚射击》的答案后,我深入了/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`
答案 10 :(得分:1)
现已弃用Nginx-extra软件包。
当我尝试安装各种软件包时,以下内容现在对我有用 more_set_headers'服务器:我自己的服务器';
您只需执行以下操作,就不会发回服务器或版本信息
server_tokens '';
如果您只想删除版本号,则可以使用
server_tokens off;
答案 11 :(得分:0)
根据nginx documentation,它支持自定义值甚至排除:
Syntax: server_tokens on | off | build | string;
,但遗憾的是,只有商业订阅:
此外,作为我们商业订阅的一部分,从 版本1.9.13错误页面上的签名和“服务器”响应 头字段值可以使用以下字符串显式设置 变量。空字符串将禁用“服务器”的发射 字段。
答案 12 :(得分:0)
我知道这篇文章有点老,但是我发现一种解决方案很容易,它可以在基于Debian的发行版上工作,而无需从源代码编译nginx。
首先安装nginx-extras软件包
sudo apt安装nginx-extras
然后通过编辑nginx.conf并在服务器块内添加以下行来加载nginx http头more模块
load_module modules / ngx_http_headers_more_filter_module.so;
完成后,您将可以同时访问more_set_headers和more_clear_headers指令。
答案 13 :(得分:-4)
您是否在询问响应中的服务器标头值?您可以尝试使用add_header指令进行更改,但我不确定它是否可行。 http://wiki.codemongers.com/NginxHttpHeadersModule