如何根据子请求设置变量值



如果用户正确登录,我正在尝试根据结果设置变量的值。我将把这个变量用于条件 ssi。我正在使用auth_request module来授权用户。此授权适用于所有页面。我面临的问题是,对于 401/403 错误,NGINX 会将401传递给客户端。我想做的是无论如何都显示一些页面(即使授权失败),但为条件 ssi 设置变量(子请求的状态)。

配置文件

  location / {
    set $auth_status 100; #Default Value
    error_page 401 403 $show_anyway;
    error_page 500 = /auth_fallback;
    auth_request /auth_public;
    auth_request_set $auth_status $upstream_status;
    auth_request_set $show_anyway $request_uri;
  }
  location = /auth_public
  {
    proxy_pass http://localhost:8081;
    proxy_pass_request_body off;
    #return 200; #Tried this, but sub request doesn't fire.  
  }

error_page 401 403 =200 ...可以提供帮助。我测试了以下配置

ssi on;
location / {
    set $auth_status 100;
    auth_request /auth.php;
    auth_request_set $auth_status $upstream_status;
    error_page 401 403 =200 @process;
}
location @process {
    try_files $uri =404;
}
location = /auth.php {
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_index index.php;
    include fastcgi_params;
}

请注意@process内部的try_files - $uri/删除以防止index指令进行内部重定向(如果找到索引文件)。如果内部重定向传递到location /,将使用最后一个错误代码。

最新更新