场景:
服务器上几个管理后台服务的web应用程序,都挂在*.test.localhost域名下,如mysql.test.localhost、redis.test.localhost。但是每个web应用自身可能没有权限认证或权限认证不够安全,所以希望在访问任意一个*.test.localhost地址的应用前,都先进行统一的登录和权限认证。
方法:
使用nginx的auth_request,如下配置。
访问mysql.test.localhost或redis.test.localhost时,根据auth_request的配置,会把请求的相关信息传给/test-auth,由/var/www/test/auth/auth.php通过test.localhost下的cookie的token来判断是否已经进行统一登录,若登录,返回200,没登录,返回401。
若返回401,根据error_page配置,跳转到/test-auth/login,由/var/www/test/auth/login.php呈现登录页面。
登录页面提交登录,成功的话,设置test.localhost下的cookie的token,并显示登录成功页面。
这之后再访问mysql.test.localhost或redis.test.localhost,即进入相应应用。
另外提供auth.test.localhost,进行登录或查看登录状态。
nginx配置如:
server {
listen 80;
server_name *.test.localhost;
return https://$host;
}