当我尝试使用nginx的auth_request时,发生了一个棘手的行为:
server {
listen 8080;
server_name localhost;
charset utf-8;
set $myk $arg_k;
location / {
auth_request /myauth;
proxy_pass http://nginxcluster/;
}
location = /myauth {
#internal;
default_type 'text/plain';
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Original-METHOD $request_method;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
set $digest "test";
if ($digest != $myk){
echo $digest;
echo $myk;
return 403;
}
return 200;
}
}
字符串
我得到403当我尝试访问http://127.0.0.1:8080/?k=test。但是我在尝试访问http://127.0.0.1:8080/myauth?k=test时得到了200。
如何理解这种现象?太奇怪了!
1条答案
按热度按时间smdncfj31#
在您的配置中,当您访问http://127.0.0.1:8080/?k=test时,对/myauth发出的子请求不包括查询参数k=test,因此$myk保持未设置状态,并且/myauth位置块中的if块失败,导致403响应,另一方面,当您访问http://127.0.0.1:8080/myauth?k=test时,/myauth位置块中的if块成功,因为查询参数k=test是URL的一部分,并且$myk被正确地设置为“test”,导致200响应。要修复它,您的配置应该是这样的:
字符串