有条件基本身份验证和 proxy_pass

有条件基本身份验证和 proxy_pass

我有一个 SPA,它只能从某些国家/地区访问,而从其他国家/地区访问它则需要基本身份验证。我目前正在使用 CloudFlare 的cf_ipcountry标头来确定请求来自哪个国家/地区。

我知道我可以使用 NGNIX 进行条件基本身份验证,如下所述:仅当请求中存在某个标头时才进行基本身份验证?

另一方面,如果用户代理是googlebotbingbot,我需要将proxy_pass请求发送到另一个后端服务器,该服务器将 SPA(评估 javascript)呈现为 HTML。

最终结果应如下所示:

map $http_cf_ipcountry $authentication {
    default    "off";
    "US"       "basic_auth";
    "CA"       "basic_auth";
}

map $http_user_agent $ssr {
    default  0;

    "bingbot"    1;
    "googlebot"  1;
}

server {
    ...

    location / {
        auth_basic $authentication;
        auth_basic_user_file /......./basic_auth;

        include proxy_params;
        if ($ssr = 1) {
            proxy_pass http://backend_server;
        }

        if ($ssr = 0)
            try_files $uri =404;
        }
    }

    ...
}

但不允许try_files进入if。我该如何调整我的配置以实现我的目标?

答案1

我找到了解决方案:

    location / {
        include proxy_params;
        if ($ssr) {
            set $authentication "off";
            proxy_pass http://backend_server;
            break;
        }

        auth_basic $authentication;
        auth_basic_user_file /.......x/basic_auth;

        try_files $uri $uri/ =404;
    }

相关内容