运维部落

首页 > 解决方案, 软件使用 > nginx列出目录及对目录进行密码保护

nginx列出目录及对目录进行密码保护

2013年7月1日

1、如何让nginx列目录
在对应的网站配置段中,加入:

1
2
3
4
5
6
7
location /_files
{
    root /home/wwwroot;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
}

解释一下:
root是指当前的网站根文件夹,例子中列出的根目录其实是/home/wwwroot/_files目录,如果不填则沿用上层的root配置;
autoindex是是否对该location匹配的目录在找不到索引文件(index.html、index.php等)时,列出目录,默认为off;
autoindex_exact_size是是否输出准确的大小,如果on则输出byte单位的大小,off则用GB、MB、KB来近似表示,默认为on;
autoindex_localtime是否以服务器时间输出文件时间,off则用GMT时间输出,默认为off。
参考:http://wiki.nginx.org/HttpAutoindexModule
2、对目录进行密码保护:
在对应目录的location中加入:

1
2
3
4
5
location /phpmyadmin
{
    auth_basic "Creke Server Auth";
    auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}

其中auth_basic是验证时显示的标题,auth_basic_user_file是对应的用户名密码,一行一个,与apache的“.htpasswd”一样。
参考:http://wiki.nginx.org/HttpAuthBasicModule
最后,给出一个使用perl生成htpasswd中认证用户名密码的脚本,方便生成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
 
echo "====================================="
echo "# A tool like htpasswd for Nginx    #"
echo "#-----------------------------------#"
echo "# MOD BY Creke                      #"
echo "====================================="
 
#set UserName
 
username=""
read -p "Please input UserName:" username
if [ "$username" = "" ]; then
echo "Error:UserName can't be NULL!"
exit 1
fi
echo "==========================="
echo "UserName was: $username"
echo "==========================="
 
#set password
 
unpassword=""
read -p "Please input the Password:" unpassword
if [ "$unpassword" = "" ]; then
echo "Error:Password can't be NULL!"
exit 1
fi
echo "==========================="
echo "Password was: $unpassword"
echo "==========================="
password=$(perl -e 'print crypt($ARGV[0], "pwdsalt")' $unpassword)
 
echo "$username:$password"
本文的评论功能被关闭了.