该篇需要使用ngx_openresty以及ngx_coolkit(获取$remote_passwd 输入值)
在nginx.conf所在的目录下建立文件accesslua.lua,内容为:
local res = ngx.location.capture("/getauth")
if ngx.re.match(res.body,"1") then
return
end
ngx.header.WWW_Authenticate=[[Basic realm="Restricted"]]
ngx.exit(401)
nginx.conf的配置:
在http段中加入如下内容:
upstream nginxbackend
{
drizzle_server 127.0.0.1:3306 dbname=nginx password=youpassword user=yourdbname protocol=mysql charset=utf8;
drizzle_keepalive max=100 mode=single overflow=reject;
}
在需要验证的地方(server/location)放入如下文字:
#auth request start
access_by_lua_file 'conf/accesslua.lua';
#auth request end
新加一个location /getauth,内容为:
location = /getauth
{
internal;
set_unescape_uri $user $remote_user;
set_unescape_uri $passwd $remote_passwd;
set_quote_sql_str $user $user;
set_quote_sql_str $passwd $passwd;
drizzle_query "select count(*) as count from user where user=$user and passwd=$passwd";
drizzle_pass nginxbackend;
rds_json on;
}
OK,大功造成。
效果如图所示:
这只是一个验证用户名和密码的例子,还可以进行扩展,比如验证IP,验证浏览器的类型,验证时间段等等,结合lua,扩展无极限