使用nginx做反向代理,当后端服务器需要认证时,需要把认证的http header也传到后端服务器上去,配置为:
proxy_set_header Authorization $http_authorization;
这样配置后,服务器会发出一个认证窗口出来,提示用户输入用户名密码。
如果不想让用户输入用户名密码,可用下面的配置:
proxy_hide_header WWW-Authenticate; //隐藏发给用户的认证http header,相当于不提示用户输用户名密码了。
proxy_set_header Authorization "Basic dXNlcjpwYXNzd29yZA=="; //发送httpd 认证 header给后端服务器。
dXNlcjpwYXNzd29yZA==
是base64(user:pass)
得到的。
解释一下上面两个http header:
WWW-Authenticate: 这是GET的时候带的,服务器发给客户端的。表明客户端请求实体应该使用的授权方案
示例:WWW-Authenticate: Basic
Basic是基本的http认证方式,除此之外还有NTLM等,NTLM是微软的,nginx目前不支持。
Authorization 这个是用户输入用户名和密码后,POST到服务器的时候带的。HTTP授权的授权证书
示例:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==