nginx auth_request棘手的行为

zqdjd7g9  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(116)

当我尝试使用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。
如何理解这种现象?太奇怪了!

smdncfj3

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响应。要修复它,您的配置应该是这样的:

server {
     listen 8080;
     server_name localhost;
     charset utf-8;

location / {
     auth_request_set $myk $arg_k;
     auth_request /myauth;
     proxy_pass http://nginxcluster/;

字符串

相关问题