代码之家  ›  专栏  ›  技术社区  ›  daniels

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

  •  121
  • daniels  · 技术社区  · 16 年前

    有一个隐藏版本的选项,这样它将只显示nginx,但是有没有一个隐藏版本的方法,这样它就不会显示任何内容或更改标题?

    11 回复  |  直到 7 年前
        1
  •  56
  •   joelhardi    14 年前

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

    server:string是 被送回客户那里告诉 它们是什么类型的HTTP服务器 正在运行,可能是哪个版本。 此字符串由以下位置使用 Alexia和Netcraft收集 关于多少和什么的统计 Web服务器的类型位于 互联网。支持作者和 我们推荐的nginx统计数据 保持此字符串不变。但是,为了 你可能不想让人们安全 知道你在跑什么,你可以 在源代码中更改此项。编辑 源文件 src/http/ngx_http_header_filter_module.c 看看第48行和第49行。你可以 将字符串更改为 想要。

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

        2
  •  122
  •   Brandon Rhodes    13 年前

    如果您使用nginx代理后端应用程序,并希望后端公布自己的应用程序 Server: 头没有nginx覆盖,然后你可以进入你的 server {…} 节与集:

    proxy_pass_header Server;
    

    这将说服nginx将该头文件单独保存,而不是重写后端设置的值。

        3
  •  64
  •   Shammel Lee    9 年前

    上一次更新是在不久前,所以下面是我在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 .

        4
  •  35
  •   Rui Marques    13 年前

    简单,编辑/etc/nginx/nginx.conf并从中删除注释

    #server_tokens off;
    

    寻找 HTTP协议 部分。

        5
  •  31
  •   idmean    8 年前

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

    server_tokens off;
    more_set_headers 'Server: My Very Own Server';
    
        6
  •  25
  •   gnat Nat Poor    8 年前

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

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

    这是标准的增强版本 headers 模块,因为它提供了更多的实用程序,如重置或清除“内置头文件”之类 Content-Type , Content-Length Server .

    它还允许您使用 -s 选项和可选的内容类型条件 -t 选项,同时使用 more_set_headers more_clear_headers 指令…

        7
  •  15
  •   Parthian Shot Roushan    10 年前

    如果您可以将头改为另一个不超过5个字母的字符串,您可以简单地修补二进制文件。

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

    作为一种解决方案,它有一些显著的优势。也就是说,您可以允许包管理器处理您的nginx版本(因此,不从源代码编译),即使您的发行版没有nginx extras可用,而且您不需要担心nginx extras等其他代码易受攻击。

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

    我说的是“五个字母或更少”,因为你当然可以替换:

    NGNIX\R 0

    具有

    鲍勃\ R 0 \ R 0

    保持最后两个字节不变。

    如果实际需要的字符数超过5个,则需要保留服务器标记,并替换(稍长)格式字符串,尽管格式字符串-1(用于回车)的长度对该长度有一个上限。

    …如果以上这些都对您没有意义,或者您以前从未修补过二进制文件,那么您可能希望远离这种方法。

        8
  •  14
  •   Aamish Baloch    8 年前

    安装nginx-extras

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

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

    more_clear_headers Server;
    server_tokens off;
    
        9
  •  2
  •   Jauder Ho    16 年前

    唯一的方法是修改文件src/http/ngx_http_header_filter_module.c。我把第48行的nginx改成了另一个字符串。

    您可以在nginx配置文件中设置 塞维尔托克森 关闭。这将阻止nginx打印版本号。

    要查看情况,请尝试 卷曲I http://vurbu.com/ GRIP服务器

    它应该会回来

    Server: Hai
    
        10
  •  1
  •   Afrig Aminuddin    7 年前

    在我读到帕提亚枪击案的答案后,我开始深入研究 /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`
    
        11
  •  -4
  •   Vasil    16 年前

    您是否询问响应中的服务器头值?你可以尝试用一个add_header指令来改变它,但是我不确定它是否可以工作。 http://wiki.codemongers.com/NginxHttpHeadersModule