当前位置:  开发笔记 > 后端 > 正文

你如何更改nginx返回的服务器头?

如何解决《你如何更改nginx返回的服务器头?》经验,为你挑选了8个好方法。

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



1> Brandon Rhod..:

如果您使用nginx代理后端应用程序并希望后端在Server:没有nginx覆盖的情况下宣传自己的标头,那么您可以进入您的server {…}节并设置:

proxy_pass_header Server;

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


这种技术很容易解决问题.
如果由于安全原因而进行此更改,我不确定这是否足够.如果您的服务器需要返回错误消息,标题仍然是'nginx'
虽然这很容易解决问题但是有一点需要考虑:当使用反向代理时,静态文件通过nginx提供,因此当您在firebug网络面板中打开例如图像时,您仍然可以将服务器视为nginx

2> jamescampbel..:

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


将空字符串设置为Server:将禁止服务器头:`more_set_headers'服务器:';`
@PKHunter我没有用魔鬼的舌头尝试它,但我会看到我能找到的东西.
YUM上有类似的东西吗?yum install nginx-extras不起作用.
这当然是最好的答案.应该被接受.这只是回答所有情况的一个.
为什么不只使用`more_clear_headers Server;`?

3> joelhardi..:

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

Server:string是一个标头,它被发送回客户端,告诉他们你正在运行什么类型的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头做各种运行时黑魔法.


这隐藏了版本号,但问题是"我知道我可以隐藏版本号,如何更改或删除整个'服务器'字符串?" 使用开箱即用的nginx无法做到这一点.
使用'server_tokens off;' 到目前为止是最简单的方法...确保将其放在"http"或"服务器"块中
这个答案现在有点旧了.@jamescampbell的答案现在更加精确.

4> Rui Marques..:

简单,编辑/etc/nginx/nginx.conf并删除评论

#server_tokens off;

搜索http部分.


该问题的作者已经知道此选项,该选项删除版本号,但不允许您自定义"server"标头中返回的值.
这并不会隐藏所有内容,只会隐藏服务器版本.
这很好用,一旦你这样做,你可以在标题信息上看到关于服务器的所有内容:nginx(没有版本号)谢谢!:d
不删除Server = nginx的响应头

5> Farsheed..:

这很简单:将这些行添加到服务器部分:

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


如果我们要相信apt-get autoexpansion,那么最终会有一个带有"s"的nginx-extras
在Ubuntu上,您可以安装`nginx-extra`来获取该模块.
您必须使用第3方模块http://wiki.nginx.org/HttpHeadersMoreModule编译nginx

6> Flavius..:

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

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

这是标准的增强版本标头模块,因为它提供更多的实用程序等复位或清除"内置标题"等Content-Type,Content-LengthServer.

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


使用`--add-module =/path-to-headers-more-nginx-module`编译nginx

7> 小智..:

安装Nginx Extras

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

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

more_clear_headers Server;
server_tokens off;



8> Parthian Sho..:

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

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)对于该长度有一个上限(对于回车).

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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有