假如你通过 nginx 配置了一个页面,原页面不方便加上认证或者仅仅只是想简单加个身份认证,可以考虑通过给 nginx 配置一个基本认证来实现。
注意: HTTP 基本认证本身并 不安全,容易遭到诸如 中间人攻击或者重放攻击 等安全问题。因此实际使用的时候最好结合 HTTPS 一起使用会更安全一些,这种也只使用对安全要求不高的网络环境,如果安全要求高的还是自己做认证更稳。
HTTP 基本认证是什么就不详细描述了,简单说来就是通过浏览器访问一个页面,如果有基本认证就会出现一个输入用户名密码的弹窗,然后把输入的用户名密码 Base64 之后发送到服务器进行认证(ps:安全在哪里)。后面主要是描述怎么通过 nginx 简单配置一个基本认知
# 生成用户名密码
# 使用 htpasswd
# ubuntu
apt-get install -y apache2-utils
# centos
yum -y install httpd-tools
htpasswd -c /etc/nginx/.htpasswd admin
1
2
3
4
5
6
7
2
3
4
5
6
7
- -c 创建 passwdfile.如果 passwdfile 已经存在, 那么它会重新写入并删去原有内容.
- -n 不更新 passwordfile,直接显示密码
- -m 使用 MD5 加密(默认)
- -d 使用 CRYPT 加密(默认)
- -p 使用普通文本格式的密码
- -s 使用 SHA 加密
- -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
- -D 删除指定的用户
# 使用 openssl
echo "admin:$(openssl passwd -crypt 123456)" >> /etc/nginx/.htpasswd
1
这个没试过是否可行,不过没有这个网上找一些在线生成 htpasswd 的工具生成也行。主要就是生成一个用户名和加密码密码的文件就行。
# 修改 nginx 配置
在 nginx.conf 或者对应的 server 的配置文件中加上一下配置:
location / {
auth_basic "HTTP Basic Authentication"; // 显示的名称
auth_basic_user_file /etc/nginx/.htpasswd; // 加密用户凭据的文件
}
1
2
3
4
2
3
4
配置修改完成之后先用 nginx -t
看看配置是否有误,正确后执行 nginx -s reload
重启 nginx
# 测试使用
直接在浏览器中输入 url, 会弹出用户名密码输入框, 输入刚刚在配置 nginx 之前生成的用户名密码即可访问。
如果不想每次访问都出现弹窗,可以在 url 地址前加上用户名密码信息即可,比如 https://admin:admin@localhost
。