nginx设置目录权限(显示目录、禁止访问目录、以用户密码身份访问)
1、目录列表(directory listing)
nginx让目录中的文件以列表的形式展现只需要一条指令:
autoindex on;
autoindex可以放在location中,只对当前location的目录起作用。
你也可以将它放在server指令块则对整个站点都起作用。
或者放到http指令块,则对所有站点都生效。
下面是一个简单的例子:
有时候服务器会报这种漏洞:管理后台对外,意思就是,互联网上的任何人都可以访问这个文件,其实,任何人访问这个文件这是很正常的,但是有些后台的东西肯定是不允许任何人去访问的对吗?比如说:日志文件……想要避免这个问题,我们就需要禁止访问或者是以用户密码的方式来访问;
如果你想服务器其它的目录文件也达到这样的效果,原理是一样的;
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上的一些内容不想被其他人知道,但是又想让部分人看到。
nginx的http 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文件都不会被用户访问到了。
赞赏
微信赞赏
支付宝赞赏