提醒:本文最后更新于 3027 天前,文中所描述的信息可能已发生改变,请仔细核实。
无论是作为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服务内部默认名称为任意名字》


感觉现在用 Apache 都不好意思打招呼了
@whisperer: 哈哈,也不会啊,各有所好而已啊,Apache也有自身的优势啊,比如动态配置。
当初一直在纠结用Apache还是Nginx,后来还是选择了Nginx,现在又换成Apache+Nginx了~~

@wick: 用lnmpa的都是高大上、高富帅啊!
@kn007: 只会用这个
别的不会配置。。

@wick:
好吧,说实在没用过lnmpa
@kn007: lnmpa在PHP高版本上表现不错。5.2就不行了
@张小三资源网: 5.2。。。我入门就是5.3了,我现在用着5.5.,准备升5.6了,要不是php ng一些module不支持,我随时做好准备,更新线上服务到php ng
@kn007: 我们是5.6,用Openresty
@敏: Openresty是个好东西,章哥出品!可惜很多功能用不上,所以还是老老实实编译nginx所需组件。
我还未升级到5.6,没时间。有些东东要去兼容,找时间搞,搞完估计也差不多可以上PHP 7了
@kn007: 我入门是4...目前正在重写防薇策略
@敏: 好早,我入门是博客建立之时。。那时是5.2.17吧。。
@敏: 我准备随时上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了。
为什么修改这个?
@不给力的面条: 我不是写了么
安全和装逼
个性化吧,我觉得是
话说你又在折腾服务器了?昨晚好久访问不了了~
@wick: 出现点问题。被攻击了
越来越高大上了,越来越看不懂了~
@Meekdai:
你这是笑我吧。。。。
@kn007: 哪有~
@Meekdai: 我最近也是偷懒,就说这些无关紧要的
现在用的nginx吗?
@尽欢: 一直都用,都把apache规则忘得干净了
我也还在用Apache,没换nginx,不过nginx应该是大势所趋呀
@尽欢: 我就一开始用apache,可能就用了1个月,就马上是lnmp了
@kn007: 对了,我好像也换nginx了,搞邮件回复的时候换掉了,不说我都忘了,好久没动服务器配置了
@尽欢: 我还专门学了apache,哪知道到头来,nginx熟门熟路
apache和nginx你觉得哪个好?
@AvalonDragoN龙龙: 都有好处,考虑到自身情况,还有高并发,肯定是nginx
@AvalonDragoN龙龙: apache动不动就高负载。晕死,nginx在0.2的情况,apache肯定是1.几的负载,表示实在是不敢恭维。
@AvalonDragoN龙龙: 高并发,如果apache不触发oom killer,会一直吃掉内存。当然也有个上限,但太恐怖了,负载能上到200多。。。nginx最高的负载就到60+就没了
这个装逼模式确实很赞
。。。
@张小三资源网:
那是
@1403556905: 看项目,对于你来说绝对是够用了。嘿嘿