我正在使用 nginx X-Accel-Redirect 功能,其中代理后端(A)可以“内部重定向”nginx 来重新处理新的 URI(B),就好像它是客户端浏览器最初给出的 URI 一样。
它在发出请求 B(也是代理)并将 B 的结果标头返回到客户端浏览器时效果很好。到目前为止一切顺利。
但我还有一些来自 A 的标头,我想将它们传递下去。换句话说,将来自 A 的一些标头与来自 B 的结果合并。
我该怎么做?我试过了
add_header X-My-Header $http_x_my_header;
但该$http_x_my_header
变量是空的,大概是因为原来的请求没有它。我也试过了,$upstream_x_my_header
但也是空的。我试过类似的东西proxy_pass_header X-My-Header;
,但没有。
答案1
经过反复试验,我发现$upstream_http_...
当第一次分配给变量时,标题可以正常工作;
因此,按照你的例子,情况将会变成这样;
set $my_header '$upstream_http_x_my_header';
add_header X-My-Header $my_header;
答案2
根据 nginx 手册proxy_set_header:
如果值为空字符串,则标头将不会发送到上游。
尝试使用proxy_set_header X-My-Header "OK"
或者您可能想要用作值的变量。这应该将其传递给代理以及用户。