nginx的basic auth配置由ngx_http_auth_basic_module模块提供,对HTTP Basic Authentication协议进行了支持,用户可通过该配置设置用户名和密码对web站点进行简单的访问控制。
basic auth配置示例:
1 2 3 4 |
|
说明:
- auth_basic可设置为off或其它字符串,为off时表示不开启密码验证
- auth_basic_user_file 为包含用户名和密码的文件,文件内容如elastic:YsEm9Tb4.RwB6
踩坑的地方就是这个密码,官方文档里对支持的密码类型进行了说明:
- 采用系统函数crypt()加密的密码;可通过htpasswd命令或者openssl passwd命令生成
- 通过Apache提供的基于MD5的变种加密算法(apr1),同样可通过htpasswd或者openssl passwd命令生成
- 以“{scheme}data”格式表示的加密后的密码,RFC 2307中有对该格式的密码标准进行了说明。其中scheme指的是加密算法,nginx支持的scheme有PLAIN, SHA,SSHA算法。
使用htpasswd或者openssl passwd命令生成的密码固然可以使得配置生效,nginx能够正常地进行密码安全校验,如果密码类型不支持, 则nginx或报错:
crypt_r() failed (22: Invalid argument)
但是因为业务的需要,我们要用代码生成nginx的配置并下发配置到每个云主机中,之后拉起nginx进程。项目代码使用go语言编写,所以需要找一个对应的函数或者库生成nginx支持的密码。