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