配置 Nginx 为网页添加 HTTP 基本认证

为了限制用户对某个页面的访问,通常可以使用 Nginx 的 HTTP Basic 认证模块来为页面添加 HTTP 基本认证

步骤如下:

  1. 创建一个密码文件。在这个文件中,每一行都是一个用户名和密码的组合,格式为 username:password。密码必须是通过 openssl passwd 生成的:
1
2
echo -n '用户名:' >> /etc/nginx/.htpasswd  # 写入用户名
openssl passwd -apr1 >> /etc/nginx/.htpasswd # 在交互模式下写入密文密码
  1. 在 Nginx 配置文件中设置对应的页面需要密码验证。可以在 serverlocation 块中使用 auth_basicauth_basic_user_file 指令:
1
2
3
4
location /api/ {
auth_basic "访问此区域需要密码认证!"; # 向用户提供关于受保护资源或区域的提示
auth_basic_user_file /etc/nginx/.htpasswd; # 引用密码文件
}
  1. 重新加载 Nginx 使配置生效:
1
sudo nginx -s reload

如果不进行密码认证,则会返回 401

注意:

  1. HTTP 基本认证的用户名和密码使用了可逆的 Base64 进行编码,因此如果没有启用 HTTPS ,那么在传输过程中会有安全风险
  2. HTTP 基本认证没有提供退出机制,因此如果要退出认证,需要手动清除浏览器缓存或者重启浏览器。

参考资料

  1. HTTP基本认证,维基百科
  2. HTTP 认证,MDN Web Docs