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

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

by | 42 Comments

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

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. 回复

    感觉现在用 Apache 都不好意思打招呼了 :oops:

    1. MOD回复

      @whisperer: 哈哈,也不会啊,各有所好而已啊,Apache也有自身的优势啊,比如动态配置。

  2. LV6回复

    当初一直在纠结用Apache还是Nginx,后来还是选择了Nginx,现在又换成Apache+Nginx了~~ :x :x

    1. MOD回复

      @wick: 用lnmpa的都是高大上、高富帅啊! :shock:

    2. LV6回复

      @kn007: 只会用这个 :o :o 别的不会配置。。 :x :x

    3. MOD回复

      @wick: :o :o 好吧,说实在没用过lnmpa

    4. @kn007: lnmpa在PHP高版本上表现不错。5.2就不行了

    5. MOD回复

      @张小三资源网: 5.2。。。我入门就是5.3了,我现在用着5.5.,准备升5.6了,要不是php ng一些module不支持,我随时做好准备,更新线上服务到php ng

    6. LV1回复

      @kn007: 我们是5.6,用Openresty

    7. MOD回复

      @敏: Openresty是个好东西,章哥出品!可惜很多功能用不上,所以还是老老实实编译nginx所需组件。
      我还未升级到5.6,没时间。有些东东要去兼容,找时间搞,搞完估计也差不多可以上PHP 7了

    8. LV1回复

      @kn007: 我入门是4...目前正在重写防薇策略

    9. MOD回复

      @敏: 好早,我入门是博客建立之时。。那时是5.2.17吧。。 :razz:

    10. MOD回复

      @敏: 我准备随时上7。上7要检查过期函数,据说mysql extension和memcache module是被叉叉了(我关心的点),这两样我需要检查一下,我自己是用了memcached module,memcache module 早在去年自己的VPS就不用了,不过我其他的项目的貌似还有用,回头要改下。
      貌似7还不支持igbinary module和redis module,我不大确定是否要用。这个要看看。
      其实我很期待php有类似varnish的升级文档,如 https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html 。这样会方便许多。
      7的编译法貌似也不一样。。。不过也快了,正式版或在11月发布。到时用也可以了。
      我现在已经是5.6.9了。

  3. 为什么修改这个?

    1. MOD回复

      @不给力的面条: 我不是写了么 :o 安全和装逼 :mrgreen: 个性化吧,我觉得是

  4. LV6回复

    话说你又在折腾服务器了?昨晚好久访问不了了~

    1. MOD回复

      @wick: 出现点问题。被攻击了

  5. 越来越高大上了,越来越看不懂了~ :cry:

    1. MOD回复

      @Meekdai: :o 你这是笑我吧。。。。

    2. @kn007: 哪有~ :roll:

    3. MOD回复

      @Meekdai: 我最近也是偷懒,就说这些无关紧要的

  6. LV5回复

    现在用的nginx吗?

    1. MOD回复

      @尽欢: 一直都用,都把apache规则忘得干净了 :cry:

  7. LV5回复

    我也还在用Apache,没换nginx,不过nginx应该是大势所趋呀

    1. MOD回复

      @尽欢: 我就一开始用apache,可能就用了1个月,就马上是lnmp了

    2. LV5回复

      @kn007: 对了,我好像也换nginx了,搞邮件回复的时候换掉了,不说我都忘了,好久没动服务器配置了

    3. MOD回复

      @尽欢: 我还专门学了apache,哪知道到头来,nginx熟门熟路

  8. apache和nginx你觉得哪个好?

    1. MOD回复

      @AvalonDragoN龙龙: 都有好处,考虑到自身情况,还有高并发,肯定是nginx

    2. MOD回复

      @AvalonDragoN龙龙: apache动不动就高负载。晕死,nginx在0.2的情况,apache肯定是1.几的负载,表示实在是不敢恭维。

    3. MOD回复

      @AvalonDragoN龙龙: 高并发,如果apache不触发oom killer,会一直吃掉内存。当然也有个上限,但太恐怖了,负载能上到200多。。。nginx最高的负载就到60+就没了

  9. 这个装逼模式确实很赞 :roll: 。。。

    1. MOD回复
  10. 回复

    :o 我还是用着Apache ,是不是太LOW了

    1. MOD回复

      @1403556905: 看项目,对于你来说绝对是够用了。嘿嘿

;-):|:x:twisted::smile::shock::sad::roll::razz::oops::o:mrgreen::lol::idea::grin::evil::cry::cool::arrow::???::?::!: