kn007的个人博客
♥ You are here: Home > 软件与网络 > php > 如何修改Nginx服务内部默认名称为任意名字

如何修改Nginx服务内部默认名称为任意名字

by | 42 Comments

提醒:本文最后更新于 2225 天前,文中所描述的信息可能已发生改变,请仔细核实。

change_nginx_server_name

无论是作为Web服务器或其他类型程序的反向代理服务器,Nginx("engine x")都有着高性能且轻量级的优势。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。

这也使得Nginx在如今不管是存放在高配独立服务器上的大型的门户,还是存放在迷你64M内存VPS上的小型的个人博客,Nginx都在被广泛使用着。

国内淘宝、新浪、网易、腾讯等都在使用。其中淘宝正是基于原作者的BSD-like协议,在其源代码基础上开发了Tengine,这暂且不表。

今天我们来说说,如何修改Nginx其内部默认名称。这对安全或者装逼都是非常实用的。

我们都知道一般Nginx有哪些内部名称展示,如有通过HTTP Response Header中的Server、错误页的footer、FPM-FastCGI等。

Nginx目前仅能通过修改安装包来实现重命名。

一般来说修改3个位置,一个是nginx.h、另一个是ngx_http_header_filter_module.c、还有一个ngx_http_special_response.c。

我写了个简单的Shell命令,包括下载package和自动rename:

#首先定义新的Nginx名称:
NGINX_BANNER="kn007's Server"
#下载目前最新版本1.7.10的安装包
wget -c http://nginx.org/download/nginx-1.7.10.tar.gz
#解压并进入目录
tar zxvf nginx-1.7.10.tar.gz && cd nginx-1.7.10/
#执行更名操作
sed -i "s#\"NGINX\"#\"$NGINX_BANNER\"#" src/core/nginx.h
sed -i "s#\"nginx/\"#\"$NGINX_BANNER/\"#" src/core/nginx.h
sed -i "s#Server: nginx#Server: $NGINX_BANNER#" src/http/ngx_http_header_filter_module.c
sed -i "s#\"<hr><center>nginx<\/center>\"#\"<hr><center>$NGINX_BANNER<\/center>\"#" src/http/ngx_http_special_response.c
#开始编译安装
./configure
make -j$[`cat /proc/cpuinfo | grep processor | wc -l`*2]
make install

这样就完成更名和安装。具体效果可以通过访问info.kn007.net查看。

关于sed的第一、二句是修改Nginx内部名称的,第三句是修改HTTP Response Header的,第四句是修改错误页的底部Footer的。

为什么不修改安装后的Nginx Config下的fastcgi.conf呢?

因为现在外部已经是无法了解我们的服务器名称,已经达到我们的目的了。

而且我们常用的一些程序,可能会对你的前端(反向代理服务器)做判断,毕竟Nginx不同于Apache,无法动态规则。

特别是Wordpress的缓存插件,大多会通过判断你是否Nginx,如果是的话,提醒你添加一些规则语句。

这时fastcgi.conf就起作用的,其中的

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

可以使得PHP与Nginx内部之间的互相了解。

所以我的建议,还是不修改fastcgi.conf,当然你非要改,也可以的。

fastcgi.conf自动修改可以参考第二句sed来实现,这里就不再重复。

最后最后,还要说一句,3·8妇女节快乐,周末愉快。


2017-02-18补充:
如果你使用了http 2.0,还需改一个文件:

sed -i "s#server: nginx#server: $NGINX_BANNER#" src/http/v2/ngx_http_v2_filter_module.c

2017-10-10补充:
如果你使用了http 2.0,除了上面那条补充命令,还需要一条:

sed -i "s#\"server\", \"nginx\"#\"server\", \"$NGINX_BANNER\"#" src/http/v2/ngx_http_v2_filter_module.c

这句已经不再需要了(可能部分patch需要)。 -- 2018-03-22补充

转载请注明转自:kn007的个人博客的《如何修改Nginx服务内部默认名称为任意名字

donate
有所帮助?

Comments

42 Comments立即评论
  1. 来看朋友 :roll:

  2. 回复

    我按照这个方法再lnmp环境上试了试,网站打不开了。
    可以加我QQ指导一下吗?351166181

    1. MOD回复

      @zhou92: 你改成什么先,名字。

    2. 回复

      @kn007: 随便填就可以加了,谢谢

    3. MOD回复

      @zhou92: 我问的是NGINX_BANNER你改成什么了。。。
      注意不要有特殊符号。。。。

  3. Nginx("engine x")长 知识了
    别笑我 我之前一直N-g-i-n-x...

    1. MOD回复

      @Tony Lee: 不笑,因为我一开始也这样过来的。 :twisted:

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif