/ 中存储网

Nginx配置lua和MySQL实现访问控制

2013-10-14 16:43:01 来源:itjs.cn
该篇需要使用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,大功造成。

效果如图所示:

使用nginx和lua以及Mysql实现访问控制 - lhmwzy - lhmwzy的博客

这只是一个验证用户名和密码的例子,还可以进行扩展,比如验证IP,验证浏览器的类型,验证时间段等等,结合lua,扩展无极限