我有一个 SPA,它只能从某些国家/地区访问,而从其他国家/地区访问它则需要基本身份验证。我目前正在使用 CloudFlare 的cf_ipcountry
标头来确定请求来自哪个国家/地区。
我知道我可以使用 NGNIX 进行条件基本身份验证,如下所述:仅当请求中存在某个标头时才进行基本身份验证?
另一方面,如果用户代理是googlebot
或bingbot
,我需要将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;
}