你如何更改nginx返回的服务器头?
有一个隐藏版本的选项,所以它只会显示nginx,但是有没有办法隐藏它,所以它不会显示任何内容或更改标题?
像Apache一样,这是对源代码的快速编辑并重新编译。 来自Calomel.org :
服务器:string是发回到客户端的头,告诉他们你正在运行什么types的http服务器,可能是什么版本。 这个string被像Alexia和Netcraft这样的地方用来收集有关在因特网上有多lessWeb服务器的types的统计信息。 为了支持Nginx的作者和统计数据,我们build议保留这个string。 但是,为了安全起见,您可能不希望人们知道您正在运行的是什么,您可以在源代码中进行更改。 在第48行和第49行中编辑源文件
src/http/ngx_http_header_filter_module.c
。可以将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指出一个新的选项,用分叉的HttpHeadersMoreModulereplaceNginx的标准HttpHeadersModule 。 重新编译标准模块仍然是一个快速的解决scheme,如果你想使用标准模块,并且不会经常更改服务器string,那么它是有意义的。 但是如果你想要更多的话,HttpHeadersMoreModule是一个强大的项目,可以让你用HTTP头做各种运行时黑魔法。
如果您使用nginx代理后端应用程序,并希望后端在不覆盖nginx的情况下通告自己的Server:
header,则可以进入server {…}
节并设置:
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
。
很简单,编辑/etc/nginx/nginx.conf并从中删除评论
#server_tokens off;
searchhttp部分。
有一个特殊的模块: http : //wiki.nginx.org/NginxHttpHeadersMoreModule
此模块允许您添加,设置或清除您指定的任何输出或input标题。
这是标准头文件模块的增强版本,因为它提供了更多的实用程序,如重置或清除“内置头文件”,如
Content-Type
,Content-Length
和Server
。它还允许您使用
-s
选项指定可选的HTTP状态代码条件,使用-t
选项指定可选的内容types条件,同时使用more_set_headers和more_clear_headers指令修改输出标题。
这很简单:将这些行添加到服务器部分:
server_tokens off; more_set_headers 'Server: My Very Own Server';
如果您只需将标题更改为另一个不超过五个字母的string,则可以简单地修补二进制文件。
sed -i 's/nginx\r/thing\r/' `which nginx`
作为一个解决scheme,它有几个显着的优点。 也就是说,即使nginx-extras不适用于您的发行版,您也可以允许您的nginx版本控制由包pipe理器处理(所以不需要从源代码编译),并且您不需要担心任何其他附加类似nginx-extras的代码很脆弱。
当然,您还需要server_tokens off
选项server_tokens off
,以隐藏版本号,或修补该格式string。
我说“五个字母或更less”,因为当然你可以随时更换:
nginx的\ r \ 0
同
鲍勃\ r \ 0 \ r \ 0
留下最后两个字节不变。
如果你真的想要5个以上的字符,你可以打开server_tokens,并replace(略长一点的)格式化string,虽然格式化string长度的长度有一个上限 – 1回车)。
…如果上面没有一个对你有意义,或者你从来没有修补过一个二进制文件,你可能想要远离这种方法。
安装Nginx Extras
sudo apt-get update sudo apt-get install nginx-extras
服务器细节可以通过在nginx.conf中添加以下两行(http部分下)
more_clear_headers Server; server_tokens off;
唯一的方法是修改文件src / http / ngx_http_header_filter_module.c。 我把第48行的nginx改成了不同的string。
你可以在nginxconfiguration文件中做的是将server_tokens设置为off。 这将防止nginx打印版本号。
要检查一下,请尝试curl -I http://vurbu.com/ | grep服务器
它应该返回
Server: Hai
你问在响应中的服务器标题值? 你可以尝试用add_header指令来改变它,但是我不确定它是否会起作用。 http://wiki.codemongers.com/NginxHttpHeadersModule