Nginx配置指定用户访问

背景

  • 解决问题

    网站上有一些页面还没有修改完毕,此时不便于提供给用户浏览,又或者是有一个页面的数据只是用于个人浏览,便需要对页面进行加密,此前尝试通过hexo的插件加密指定的网页,但本质上密码就写在了html源码里,形同虚设。这一切都是限于网站是静态的,无法从程序上进行限制,所以考虑直接从nginx服务器端直接控制,便引入了auth_basic的配置项

  • 使用模块

    htpasswd、nginx

  • 参考文档

    https://www.cnblogs.com/xzlive/p/9492879.html

    http://www.tashan10.com/nginxshe-zhi-wang-zhan-fang-wen-mi-ma/

使用

  1. 安装htpasswd的包

    1
    sudo apt-get install apache2-utils
  2. 执行命令生成密码文件,htpasswd的具体参数详见拓展部分

    1
    2
    3
    # htpasswd [参数] 文件存储的绝对路径 用户名 密码
    # 此处因为指定了-b选项,所以可以直接在后面追加用户名和密码的选项
    htpasswd -bdc pwd admin 123456
  3. 打开nginx配置文件,在需要验证的地方追加以下配置

    1
    2
    auth_basic "Please input password";  # 弹出提示框的提示信息
    auth_basic_user_file /home/passwd; # 生成密钥的文件所在路径
  4. 重新启动nginx即可

    1
    sudo nginx -s reload

拓展

  • htpasswd的参数对应的含义

    1
    2
    3
    4
    5
    6
    7
    8
    -c 创建passwdfile.如果passwdfile已经存在,那么它会重新写入并删去原有内容.使用同样的密钥文件新增用户则不要使用该参数
    -n 不更新passwordfile,直接显示密码
    -m 使用MD5加密(默认)
    -d 使用CRYPT加密(默认)
    -p 使用普通文本格式的密码
    -s 使用SHA加密
    -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互,修改密码的时候也使用该参数
    -D 删除指定的用户