nginx设置目录权限(显示目录、禁止访问目录、以用户密码身份访问)

1、目录列表(directory listing)

nginx让目录中的文件以列表的形式展现只需要一条指令:

autoindex on;

autoindex可以放在location中,只对当前location的目录起作用。

你也可以将它放在server指令块则对整个站点都起作用。

或者放到http指令块,则对所有站点都生效。

下面是一个简单的例子:

server {
        listen   80;
        server_name  domain.com www.domain.com;
        access_log  /var/...........................;
        root   /path/to/root;
        location / {
                index  index.php index.html index.htm;
        }
        location /somedir {
               autoindex on; 
        }
}

 

有时候服务器会报这种漏洞:管理后台对外,意思就是,互联网上的任何人都可以访问这个文件,其实,任何人访问这个文件这是很正常的,但是有些后台的东西肯定是不允许任何人去访问的对吗?比如说:日志文件……想要避免这个问题,我们就需要禁止访问或者是以用户密码的方式来访问;

 

如果你想服务器其它的目录文件也达到这样的效果,原理是一样的;

 

2、nginx禁止访问某个目录

跟Apache的Deny from all类似,nginx有deny all指令来实现。

 

禁止对叫dirdeny目录的访问并返回403 Forbidden,可以使用下面的配置:

location /dirdeny {
 deny all; 
return 403;
}

 

 

问题三:

有时我们web服务器上的某个文件夹只允许特定人员访问,又应该怎么办?这时我们需要在nginx配置文件中配置该文件夹的访问权限。

 

3、在nginx中我们使用htpasswd来生成用户名单

 

3.1、下载这个python文件:

http://trac.edgewall.org/export/10770/trunk/contrib/htpasswd.py (nginx wiki里推荐的)

 

3.2、运行步骤:

chmod 777 htpasswd.py

./htpasswd.py -c -b htpasswd username password

 

-c为生成文件;htpasswd为文件名;username为用户名;password为密码;

nginx 的 http auth basic 的密码是用 crypt(3) 加密的

 

3.3、我们把生成的htpasswd文件放到/etc/nginx目录中,修改权限chmod 400 htpasswd来保护一下该文件。

 

3.4、修改nginx配置文件

server {
server_name www.domain.com;
root /usr/share/nginx/html;
location /devdoc {
autoindex on;#显示文件列表
index index.html index.htm;#默认首页
charset utf-8;#编码
auth_basic "Restricted";#访问权限类型
auth_basic_user_file /etc/nginx/htpasswd;#用户名单
}
}

 

3.5、重启nginx,并访问: www.domain.com/devdoc则会做如下提示:

详细说明:

ngx_http_auth_basic_module模块实现让访问时,只有输入正确的用户密码才允许访问web内容。web上的一些内容不想被其他人知道,但是又想让部分人看到。

 

nginxhttp auth模块以及Apache http auth都是很好的解决方案。

 

默认情况下nginx已经安装了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 –without-http_auth_basic_module 。

 

nginx basic auth指令

语法: auth_basic string | off;

默认值::auth_basic off;

配置段: http, server, location, limit_except

 

默认表示不开启认证,后面如果跟上字符,这些字符会在弹窗中显示。

 

auth_basic_user_file指令

语法::auth_basic_user_file file;

默认值:—

配置段: http, server, location, limit_except

 

补充:

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

nginx配置:

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

 

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

也有人会选择这样写:

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

 

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

403页面配置:

error_page 403 http://www.ittce.com/public/404.html;

 

还有一些问题也需要注意,就是我们可能在站点的任一目录下放置了.sql文件,我们可以通过下面的方式禁止浏览器访问。

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

 

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

 

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论