Nginx网站或目录密码验证保护( Basic HTTP authentication)用户密码验证配置

  • 内容
  • 评论
  • 相关

nginx
nginx location auth_basic 配置
使用 nginx 作为前端服务器。某些资源要保护。用 http auth basic 认证简单方便。
nginx 的 http auth basic 的密码是用 crypt(3) 加密的。
具体可以参考:http://wiki.nginx.org/HttpAuthBasicModule


以我们做一个简单的后台管理为例, 地址:http://xxxx/admin/*, 对admin 下面的文件进行权限管理;

1. 进入ngnix配置的地址,以我的CentOS为例;

cd /usr/local/nginx/conf

2. 使用命令生成passfile 文件:
a. 使用htpasswd:

htpasswd -c -d /usr/local/nginx/conf/pass_file username

输入以上命令,回车输入密码,再次回车,输入确认密码

cat /usr/local/nginx/conf/pass_file
username:xyJkVhXGAZ8tM

b. 使用openssl:

printf "ttlsa:$(openssl passwd -crypt 123456)\n" >>/usr/local/nginx/conf/pass_file
cat /usr/local/nginx/conf/pass_file 
ttlsa:xyJkVhXGAZ8tM

4. 修改ngnix 配置

location ~ /admin {
  auth_basic "Restricted";
  #请使用绝对路径
  auth_basic_user_file /usr/local/nginx/conf/pass_file;
  #host 地址,不然认证通过之后,找不到对应的文件
  root /home/www/admin;
}

5. 重启ngnix ,sudo service nginx reload
6. 登录 http://xxxx/admin/*,弹出验证框,说明验证配置完成

如果admin中有php,就会发现 php url不能正常的解析,我们需要重新配置,配置如下:

location ~ /admin {
  auth_basic "Restricted";
  #请使用绝对路径
  auth_basic_user_file /etc/nginx/pass_file;
  #host 地址,不然认证通过之后,找不到对应的文件
  root /home/www/admin;
  if ($request_filename ~* .php)
  {
  fastcgi_pass 127.0.0.1:9000;
  }
  #下面的文件不能放在括号中,否则会报错
  fastcgi_index index.php;
  #路径同root
  fastcgi_param SCRIPT_FILENAME /home/www/admin$fastcgi_script_name;
  include fastcgi_params;
}

修改配置,重启ngnix即可,php文件显示正常

7.除此之外,我们还可以对单个文件配置验证,例如Wordpress的wp-login.php

location = /wp-login.php {
  auth_basic "Restricted";
  auth_basic_user_file /usr/local/nginx/conf/pass_file;
  fastcgi_pass  unix:/tmp/php-cgi.sock;
  fastcgi_index wp-login.php;
  include fastcgi.conf;
}

LNMP一键安装的/vhost/配置文件范例

server
    {
        listen 80;
        #listen [::]:80;
        server_name xxx.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/xxx.com;

        include wordpress.conf;
        #error_page   404   /404.html;
        include enable-php.conf;
#############################
#   WordPress login Basic   #
#############################
        location = /wp-login.php {
          auth_basic "Restricted";
          auth_basic_user_file /usr/local/nginx/conf/pass_file;
          fastcgi_pass  unix:/tmp/php-cgi.sock;
          fastcgi_index wp-login.php;
          include fastcgi.conf;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        access_log /home/wwwlog/xxx.com.log;
    }

设置完成以后效果如下
最终效果

评论

2条评论
  1. Gravatar 头像

    厘米 回复

    博主,请教一下,给WP登录文件加密码后输入用户名密码显示500错误怎么办?

发表评论

电子邮件地址不会被公开。 必填项已用*标注