某些网站系统需要用户上传文档、图片、视频等文件到某些目录下,难免程序有些漏洞,导致用户上传了PHP、CGI等可执行的文件,导致网站陷入非常为难的境地。此时我们可以通过nginx来禁止用户访问这些目录下的可执行文件。

 

nginx 配置

vim /usr/local/nginx/conf/nginx.conf

location ~ ^/(uploads|images)/.*\.(php|php5|jsp)$ {
	deny all;
}

说明: 在目录uploads、images目录下面的所有php、jsp都不能访问。

 

也会选择这样写:

location ~ ^/(uploads|images)/.*\.(php|php5|jsp)$ {
	return 403;
}

这样也是一样的,如果配置了403页面,会跳转过去。

 

403页面配置

error_page 403 http://cdn-home.mimvp.com/404.html;      // 指定CDN页面

error_page 403 404.html;      // 指定当前项目根目录下的404.html文件

 

禁止访问目录

1. 禁止访问目录 /conf/*

location ^~ /conf/ {
	deny all;
}

注意:上述/conf/后面的斜杠不能少,否则所有以conf开头的目录或文件都将禁止访问。

 

2. 禁止访问任何目录下的.sql文件,禁止浏览器访问

location ~.*\.sql {
	deny all;
}

这样,任一目录的sql文件都不会被用户访问到了。

 

总 结

1. 禁止目录或文件的配置,需要在解析匹配规则之前

2. deny 和 return 404,选择其一,推荐return 404;

实战配置如下:

## 禁止配置,要在匹配规则之前
location ~ /(mimvp_header|mimvp_footer|sitemap|conf)\.php {
#   deny  all;
    return 404;
}

## 匹配规则,如 xml, html
location / {
    root                html/mimvp_home/;
    index               index.php index.html index.htm;
    fastcgi_index       index.php;
    fastcgi_pass        127.0.0.1:9000;
    include             fastcgi.conf;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.(php|php5|html)$ {
    root           html/mimvp_home/;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi.conf;
}

 

禁止示例

禁止访问根目录下的 sitemap.php 文件

http://mimvp.com/sitemap.php

 

 

参考推荐

Apache设置禁止访问网站目录

Nginx屏蔽访问过于频繁的IP

Nginx Redirect重定向所有子域名到www