权限验证是每个应用程序中不可或缺的部分,可以保护系统的数据资源不被任何人访问到,也防止暴露敏感信息给入侵者。仅仅从安全层面来说对暴露在公网的web应用的权限控制就显得极为重要,毕竟web应用服务于正常使用者的而不是服务于其他不良目的。

对web应用权限的控制最通用手段就是认证机制(Authentication)。我们所接触到的最多最常见的认证机制就是登陆认证,通过登陆认证可以屏蔽所有不知情者的请求与访问,而知道账户和密码的用户可以安全访问系统。

不想对需要权限控制的资源开发登陆功能?那么在使用人数很少不需要用户管理模块的场景下完全可以用Nginx+htpasswd快速实现基于http请求登陆认证。

现流行的webapp中nginx是啪啦啪啦啪啦。。。htpasswd 是Apache Software Foundation 下的啪啦啪啦啪啦。。。 那么介绍完了nginx的一些特性以及htpasswd的功能与背景,回到正题今天主要介绍一下怎么使用Nginx配合htpasswd建立简单的登陆功能。

在linux系统上一般默认装有python,那么直接用python工具产生密码文件    

下载工具脚本

1
2
$cd /usr/local/bin
$wget http://trac.edgewall.org/export/10791/trunk/contrib/htpasswd.py

如果没有执行权限

1
$chmod 755 /usr/local/bin/htpasswd.py

产生密码文件 用户admin 密码 123456

1
$htpasswd.py  -c -b /home/www/your.domain.com/.htpasswd admin 123456

注意:如果重复使用以上命令会覆盖原有的密码文件,原有的用户和密码会丢失

想在同一个密码文件中追加不覆盖原来的密码文件使用以下命令 追加 用户admin1 密码 223456

1
$htpasswd.py -b /home/www/your.domain.com/.htpasswd 用户admin1 223456

编辑你的web Nginx配置

1
$vi /your_path_of/nginx/your_nginx.conf

想对所有www.example.com/admin的访问增加权限配置如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
server {
       listen 80;
       server_name your.domain.com;
       root /home/www/your.domain.com/;

       location /admin {
                auth_basic "Restricted";
                auth_basic_user_file /home/www/your.domain.com/.htpasswd;
       }
	}

如果想对相对的访问规则做权限控制修改Nginx的Regex规则

最后重启nginx服务使更改的配置生效

1
$service nginx restart

如果还没有配置nginx为服务使用

1
/your_path_of/nginx/sbin/nginx -s reload

现在访问http://your.domain.com/admin 就会提示输入用户名密码,输入正确的用户名密码,收工。

简单几分钟实现web app基于http登陆功能,相对开发环境搭建、开发、测试、部署的时间轻便多了,时间就是生命,珍惜再珍惜。如果是企业级应用对用户提供登陆认证功能还是应该使用应用提供的登陆功能更加合适,方便用户信息的存储,统计,分析,管理等等。


本文地址
本文采用 知识共享署名 4.0 国际许可协议进行许可,欢迎转载内容,并请注明出处。