如何将 nginx X-Accel-Redirect 中的标头传回浏览器?

如何将 nginx X-Accel-Redirect 中的标头传回浏览器?

我正在使用 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"或者您可能想要用作值的变量。这应该将其传递给代理以及用户。

相关内容