Nginx配置Basic Auth登录认证
简介
Basic Auth用于服务端简单的登录认证,通常使用服务器Nginx、Apache本身即可完成。比如我们要限定某个域名或者页面必须输入用户名、密码才能登录,但又不想使用后端开发语言,此时Basic Auth就派上用场了。
Basic Auth 使用htpasswd工具进行生成 http 基本认证的密码文件。
安装htpasswd
htpasswd是Apache密码生成工具,Nginx支持auth_basic认证,因此我门可以将生成的密码用于Nginx中,输入一行命令即可安装:yum -y install httpd-tools
,参数如下:
-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-n 不更新passwordfile,直接显示密码
-m 使用MD5加密(默认)
-d 使用CRYPT加密(默认)
-p 使用普通文本格式的密码
-s 使用SHA加密
-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-D 删除指定的用户
生成密码
#生成密码
htpasswd -c /usr/local/nginx/ngx_htpasswd username
#执行上命令后会要求输入两次密码,/usr/local/nginx/ngx_htpasswd 是在指定目录下创建密码文件passwd ,username即为需要设置的账号。如果文件已经存在不需要添加-c参数
New password:
Re-type new password:
Adding password for user ***
# 查看文件内容
cat /usr/local/nginx/ngx_htpasswd
admin:$apr1$KYInRQ0F$uIphhVnrzkrOMo3jSbeXS0
如果你不想安装htpasswd,也可以通过在线 htpasswd 生成器来完成。
载入配置
接下来在Nginx配置文件中(通常是server段内),加入如下两行,并重载Nginx(/usr/local/nginx/sbin/nginx -s reload
)即可生效。
server {
listen 80;
server_name test.com;
auth_basic "登录认证";
auth_basic_user_file /usr/local/nginx/ngx_htpasswd;
}
重启Nginx服务后,访问test.com 就会要求输入用户名、密码。
备注:一定要注意auth_basic_user_file路径,如果文件不存在,会不厌其烦的出现403。
如果只想某一个页面支持Basic Auth,可以将auth_basic配置到location里:
location /test {
auth_basic "登录认证";
auth_basic_user_file /usr/local/nginx/ngx_htpasswd;
}
访问测试
再访问站点,提示需要输入用户名和密码才可以访问,此方法适合不宜公开的站点,比如PHPmyadmin,这样可避免被弱口令扫描,无疑再上了一把锁