Nginx 配置 HTTP 基本认证(Basic Authentication)

2021/5/27 nginx安装配置

假如你通过 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
  • -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

配置修改完成之后先用 nginx -t 看看配置是否有误,正确后执行 nginx -s reload 重启 nginx

# 测试使用

直接在浏览器中输入 url, 会弹出用户名密码输入框, 输入刚刚在配置 nginx 之前生成的用户名密码即可访问。

如果不想每次访问都出现弹窗,可以在 url 地址前加上用户名密码信息即可,比如 https://admin:admin@localhost