有一个选项可以隐藏版本,使其仅显示nginx,但是也可以隐藏该版本,以使其不显示任何内容或更改标题吗?
有一个选项可以隐藏版本,使其仅显示nginx,但是也可以隐藏该版本,以使其不显示任何内容或更改标题吗?
Answers:
与Apache一样,这是对源代码的快速编辑并重新编译。来自Calomel.org:
Server:字符串是标头,它被发送回客户端,以告诉他们您正在运行哪种类型的HTTP服务器以及可能的版本。诸如Alexia和Netcraft之类的地方使用此字符串来收集有关Internet上存在多少个和哪种类型的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月编辑:道具弗拉菲乌斯低于指出一个新的选择,更换Nginx的标准HttpHeadersModule与叉形HttpHeadersMoreModule。重新编译标准模块仍然是快速解决方案,如果您要使用标准模块并且不会经常更改服务器字符串,则有意义。但是,如果您还想要更多,则HttpHeadersMoreModule是一个强大的项目,可让您使用HTTP标头进行各种运行时黑魔法。
r->headers_out.server
。
如果您使用nginx代理后端应用程序,并且希望后端在Server:
不通过nginx覆盖它的情况下公布其自己的标头,则可以进入server {…}
节并进行以下设置:
proxy_pass_header Server;
这将说服nginx保留该标头,而不重写后端设置的值。
最近的更新是前一阵子,所以这是在Ubuntu上对我有用的东西:
sudo apt-get update
sudo apt-get install nginx-extras
然后将以下两行添加到的http
部分中nginx.conf
,该部分通常位于/etc/nginx/nginx.conf中:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
另外,不要忘记使用重启nginx sudo service nginx restart
。
more_set_headers 'Server: ';
简单,编辑/etc/nginx/nginx.conf并从中删除注释
#server_tokens off;
搜索http部分。
非常简单:将这些行添加到服务器部分:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
以获取该模块。
有一个特殊的模块:http : //wiki.nginx.org/NginxHttpHeadersMoreModule
该模块允许您添加,设置或清除您指定的任何输出或输入标头。
这是标准的增强版本标头模块,因为它提供了像复位或清除“内置标题”等更多的实用程序
Content-Type
,Content-Length
和Server
。它还允许您在使用more_set_headers和more_clear_headers指令修改输出标头的同时,
-s
使用-t
选项指定可选的HTTP状态代码条件,并使用选项指定可选的内容类型条件...
--add-module=/path-to-headers-more-nginx-module
安装Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
通过在nginx.conf中添加以下两行(在http部分下),可以从响应中删除服务器详细信息
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
不起作用-我想这可以在Debia / Ubuntu等上使用apt-get
。)
如果您可以将标头更改为另一个字符串(不超过五个字母),则可以简单地修补二进制文件。
sed -i 's/nginx\r/thing\r/' `which nginx`
作为解决方案,它具有一些显着的优点。也就是说,即使nginx-extras对您的发行版不可用,您也可以允许它由软件包管理器处理nginx版本(因此,无需从源代码进行编译),并且您无需担心任何其他问题像nginx-extras这样的代码容易受到攻击。
当然,您还需要设置option server_tokens off
,以隐藏版本号,或者也修补该格式字符串。
我说“五个字母或更少”是因为您可以随时替换:
nginx \ r \ 0
与
bob \ r \ 0 \ r \ 0
保留最后两个字节不变。
如果您实际上希望使用五个以上的字符,则需要保留server_tokens并替换(稍长一些)格式字符串,尽管该长度又受格式字符串长度的限制-1(对于回车)。
...如果以上都不适合您,或者您以前从未修补过二进制文件,则可能要远离这种方法。
sed
上面运行该命令,该`which nginx`
部分将返回二进制文件的路径,然后该sed
命令执行字节替换。
nginx
以使更改生效,我也不会感到惊讶。说了什么 我敦促您不要使用其他答案之一。如果您不是很熟悉我所说的所有内容,并且您不知道/etc
目录的用途,那么像这样的黑客是很危险的。
唯一的方法是修改文件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`
/usr/sbin
文件夹内执行的第一个命令会产生以下结果:sed: can't read is: No such file or directory
您是否在询问有关服务器标头值的信息?您可以尝试使用add_header指令进行更改,但不确定是否可以使用。http://wiki.codemongers.com/NginxHttpHeadersModule