Nginx关闭版本显示信息并修改server显示信息
- 隐藏版本信息
Nginx 会在 http 头,或者出现错误页的时候会有醒目的版本号提示,为了安全,可以关闭这些信息。
方法很简单,只需在nginx.conf
的http {
里头加入server_tokens
的参数
include mime.types;
default_type application/octet-stream;
server_tokens off; #关闭版本显示
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
保存之后重启nginx服务生效;
混淆Server信息
我是不太愿意告诉别人我是使用什么Server的,但没有找到相关文献去隐藏它,所以我们可以混淆她,如把Server返回GFW之类的。
大部分情况下,扫描我们response返回的header中的server信息.我们可以采用编译源码的方法来改变返回的Server,笔者的版本是nginx1.7.0,我们修改src/http/ngx_http_header_filter_module.c
中的48行
static char ngx_http_server_string[] = "Server: nginx" CRLF;
把其中的nginx改为我们自己想要的文字即可,笔者就改为了GFW. 笔者输出的Server:GFW.(这个前提是你进行了第一个步句的操作,关闭了版本号)
如果你的版本号是开着的,你又想调戏下脚本小子.比如Server:billgate/1.9.0
我们修改src/core/nginx.h
定位到13-14行
#define NGINX_VER "nginx/" NGINX_VERSION
Server返回的就是常量NGINX_VER
, 我们把NGINX_VERSION
大小定义为1.9.0,nginx改为billgate就能达到我们的目的了。
隐藏PHP的版本号
PHP容易暴露的版本号在什么地方呢?其实也是在HTTP头,以类似X-Powered-By: PHP/5.2.11这种形式存在,大家可能会想到会不会是Nginx问题,而去到Nginx里面找相关配置,呵呵,其实这个是在PHP的配置文件php.ini里改动,打开php.ini,找到下面叙述:
; Miscellaneous ;
;;;;;;;;;;;;;;;;;
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header). It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = On
将expose_php = On
改为expose_php = Off
就搞定了,当然,对于Apache服务器还有另外一个方法可以直接尝试在.htaccess文件中Header unset X-Powered-By,删除X-Powered-By节,不过我还是建议改动php.ini的expose_php。
nginx和.htaccess:禁止目录运行PHP
很多站长都有被挂马的经历,挂马不外乎两种:
- 自己作孽安装不明来路的插件或主题。
- 用户通过途径上传病毒、木马文件。
.htaccess禁止运行PHP
<Directory /home/wwwroot/content/uploadfile/>
php_flag engine off
</Directory>
Nginx禁止运行PHP
location /content/uploadfile/ {
location ~ .*\.(php)?$ {
deny all;
}
}
nginx禁止用户访问隐藏文件和.htaccess文件
.htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。
.htaccess文件包含了我们站点中所有的文件目录和路径,高危文件,一般是要隐藏的!不能裸奔!
站点配置文件(vhost)中禁止访问.htaccess文件语法如下:
location ~ /\.ht {
deny all;
}
禁止访问所有目录(包括子目录)下的隐藏文件
location ~ /\. {
deny all;
}