如何为Nginx配置HTTP基本认证?-腾讯云开发者社区

腾讯云 · · 767 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

开始之前


在某些情况下,我们希望对服务器上的一些资源进行限制,例如服务器/api路径下的所有资源,必须先进行身份验证然后才能访问资源,对于这个需求我们可以通过 HTTP Basic authentication 协议来完成,Nginx 使用 ngx_http_auth_basic_module 模块支持 HTTP基本身份验证 功能 。

HTTP基本身份验证


RFC 7235 定义了一个HTTP身份验证框架,服务器可以用来针对客户端的请求发送challenge(质询信息),客户端则可以用来提供身份验证凭证。

质询与应答的工作流程如下:

身份验证框架中最常用的HTTP认证方案是 "HTTP Basic authentication"(RFC 7617)。该方案中规定使用"用户的ID/密码"作为凭证信息,并且使用 base64算法进行编码。由于用户 ID 与密码是是以明文的形式在网络中进行传输的(base64 可逆),所以基本验证方案并不安全,建议配合 HTTPS协议使用。

配置步骤


1. nginx 配置文件

cat /etc/nginx/conf.d/default.conf

server {

    listen 80;
    server_name  www.demo.com;
    
    #..其它配置项目省略
    
    location ^~ /api {
        auth_basic "authentication";
        auth_basic_user_file conf.d/.htpasswd;
    }
    
    #..其它配置项目省略

}

2. 创建一个 htpasswd帐密文件

# 格式每行一个账户
用户名:密码

# nginx 可以直接使用 Apache 的 htpasswd命令创建的密码文件。
# 例如创建一个文件名为 htpasswd、帐号为 dongnan、密码为 zongming.net 。
htpasswd -bdc htpasswd dongnan zongming.net

如果没有 htpasswd命令,也可以使用 openssl passwd 命令代替。

echo  -n 'dongnan:' >> .htpasswd
openssl passwd -apr1 zongming.net >> .htpasswd

cat -A .htpasswd
dongnan:$apr1$nM8/P9Os$7hFSdSKCXejSxMYagNLYE/$

3. 重启 nginx

nginx -t && nginx reload

4. 验证

小结


最后来总结下文章中的知识点

  • 使用 auth_basic 指令,启用 HTTP基本身份验证。
  • 使用 auth_basic_user_file 指令, 指定帐密文件位置。
  • 如果没有 Apache htpasswd 命令,可以使用 openssl 命令代替。
  • HTTP基本身份验证,使用 base64算法进行编码,并以明文的形式在网络中进行传输,建议配合 HTTPS协议使用。

参考

http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication

本文来自:腾讯云

感谢作者:腾讯云

查看原文:如何为Nginx配置HTTP基本认证?-腾讯云开发者社区

767 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传