在Nginx用htpasswd对网站进行密码保护

原文:http://www.fancycedar.info/2013/06/apache-nginx-htpasswd/ 很不错,一直在找,又是无意间看到了,无条件转发 很多时候我们需要对一些网站进行密码保护,比如团队内部的站点、demo站点等等。这里所说的密码保护是nginx服务器级的,并非网站应用层的注册登录那一套,而是利用nginx服务器配置和htpasswd文件来实现访问的密码验证。 最后的效果就类似(不同浏览器的界面有所不同): Authentication Required Authentication Required   如果认证失败,就会报HTTP错误:401 Authorization Required。 要实现这样的功能,就需要更改服务器的配置,并设定好用于登录的用户名和密码。 首先我们需要更改网站的Nginx的server配置,Ubuntu服务器的话这个配置文件通常位于/etc/nginx/sites-enabled/,比如我这里就使用默认的配置文件/etc/nginx/sites-enabled/default来做一个例子:
  1. server {
  2.     server_name www.fancycedar.info
  3.     root /www/fancycedar
  4.     # ...
  5.     location / {
  6.         # 添加下面两行
  7.         auth_basic      "Restricted";
  8.         auth_basic_user_file  htpasswd;
  9.         # ...
  10.     }
  11.     # ...
  12. }
接下来需要创建htpasswd文件,这里有一些细节需要注意:
htpasswd的路径
和nginx.conf在同一级目录即可。Ubuntu服务器的话一般就在/etc/nginx/下面。
htpasswd的内容
每一行为一个用户,格式为username:password。但是要注意,这里的password不是明文,而是将password进行crypt(3)加密后的字符串。 你可以使用一段PHP代码来生成htpasswd中的password:
  1. <?php
  2. // 密码明文
  3. $password = 'some password';
  4. // 对密码进行加密
  5. $password = crypt($password, base64_encode($password));
  6. // 获得加密后的密码
  7. echo $password;
  8. ?>
  然后将字符串写入htpasswd文件中:
  1. username1:xucqMk13TfooE
  2. username2:YXTfb3xWKOMBM
  3. ...
htpasswd的权限
需要更改htpasswd文件的权限,执行如下命令:
  1. sudo chown root:www-data htpasswd
  2. sudo chmod 640 htpasswd
Are You Ready?
当上面的准备工作都做好之后,我们就可以重新载入或者重启Nginx服务器了:
  1. sudo /etc/init.d/nginx reload
  2. # or
  3. sudo /etc/init.d/nginx restart
完工。
posted @ 2013-06-09 23:51  test.cfs  阅读(192)  评论(0编辑  收藏  举报