在我的 nginx 配置中,我有以下指令:
location /api/v2/compute {
rewrite (?i)^/api/v2/compute(.*)$ /api/v2/internal$1 break;
auth_request /enforce;
proxy_pass http://vm-manager;
}
我想要一个 /enforce 端点来转发(在标头中)URI重写后:
location = /enforce {
proxy_set_header X-Forwarded-Method $request_method;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_pass http://enforcer;
}
问题是 $request_uri 包含原始 URL,而不是重写后的 URL。如果我使用proxy_set_header X-Forwarded-Uri $uri;
,我会得到当前处理的 URL - /enforce
。
我尝试set $rewrite_uri $uri
在原始位置和proxy_set_header X-Forwarded-Uri $rewrite_uri;
中/enforce
,但不起作用。
您知道如何在 auth_request 中设置重写后的 URL 吗?
答案1
我最终能够使用ngx_headers_more模块。
location /api/v2/compute {
rewrite (?i)^/api/v2/compute(.*)$ /api/v2/internal$1 break;
more_set_input_headers "X-Forwarded-Uri: $uri";
auth_request /enforce;
proxy_pass http://vm-manager;
}