Alien的博客

Nginx屏蔽git和svn目录的访问

因为web中的所有文件都是靠git来更新的,所以在web的根目录下会留下git相关的一些文件,里面记录了一些git的配置信息,稍不留神就可能会造成信息泄露,所以需要在nginx上直接屏蔽掉对git的访问。

屏蔽方法也很简单,直接在nginx的配置文件中加一个location,把访问git的请求直接返回404就行了。
可是nginx下的配置文件太多了,一个一个的去修改配置文件太繁琐了。
后来请教了一下小坏(www.xiaohuai.com),他告诉我直接新建一个配置文件写需要屏蔽的文件/目录,然后再每个配置文件中include一下就ok了,这样以后再加入其他屏蔽的文件/目录时也更方便。

于是我在nginx/conf.d下新建了一个global目录,然后新建server_deny.conf配置文件把所有需要屏蔽掉的目录/文件都写到这里面


[root@WEB1 ~]# cat /etc/nginx/conf.d/global/server_deny.conf 
#deny access
#访问路径
location ~ (.git|.gitattributes|.gitignore|.svn) {
  return 404;
}
#访问的文件类型
location ~ (log$|txt$|sh$) {
  if ($request_filename !~ robots.txt$ ){
    return 404;
    }
}


接下来就需要在所有配置文件下include这个配置文件,这里我也不想手动去一个一个的加,所以想用sed的命令搞定
因为我所有nginx配置文件的里面的结构大概都是差不多的,所以我就决定批量在所有配置文件中的第六行加入include(为了配置文件看起来整洁我还加了点空格)


sed -i '6 i\    include /etc/nginx/conf.d/global/server_deny.conf;' *.conf


执行完成后手动随机检查了几个配置文件看没问题
然后让nginx检查一下配置文件并重新reload一下nginx


[root@WEB1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@WEB1 ~]# /etc/init.d/nginx reload


执行完成后再访问一下屏蔽的内容,看是不是已经直接返回404了