nginx列出目录及对目录进行密码保护
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" |