nginx 302 转发如何携带原请求的 head

40 天前
 hello826

场景是有一台内网的 nginx 不能反问外网,但是有个请求需要转发到外网的一个地址,目前通过 return 302 实现了 但是 302 的时候无法携带 head ,试了

proxy_set_header X-Original-userAccount $http_x_original_userAccount

proxy_set_header X-Original-user-account $http_x_original_user_account

也还是取不到头,服务的是通过 request.getHeader("userAccount")取的 具体 nginx 配置如下,有无运维大佬能指点一下

localtion /test{

proxy_set_header X-Original-userAccount $http_x_original_userAccount;

proxy_set_header X-Original-user-account $http_x_original_user_account;

return 302 http://10.14.13.12/test?$args;

}

2384 次点击
所在节点    程序员
29 条回复
jifengg
40 天前
试了下,启动一个 http 服务( 8081 端口)打印原始 header 和 body ,并用 nginx ( 80 端口)配置 307 到这个服务
location =/test307 {
return 307 http://127.0.0.1:8081/?redirtby=nginx;
}

客户端发起请求时携带 header

curl "127.1/test307" -iL --header "h1:v1" --header "X-Original-user-account:jifeng"

在 http 服务中是能收到这两个 header 的。

在 nginx 中 add_header 没用。必须是客户端携带的 header 。

另外,你要确保你取 header 的那个代码是正确的。
yinmin
40 天前
nginx 加了是 response header ,307 是指 request header ,不是一个东西。
coolloves
40 天前
cookie 试试?
设置 cookie 时指定了 Domain 属性为.test.com
比如你内网你解析一个 a.test.com,然后重定向到 b.test.com,这时候,cookie 可以 share 的吧?
proxytoworld
40 天前
为什么不反代呢
feixiangcode
40 天前
302 是服务器给终端发送一个 HTTP 的状态码,具体的跳转行为是终端拿到 Location 自己做的跳转。服务器只发状态码,跟数据无关。
dyllen
40 天前
你这配置明显就是错的,用的 proxy_set_header 指令,又 return 302 ,302 又不是转发请求,ng 服务器访问不了外网,就不能用它来代理访问外网的请求。
NeedI09in
40 天前
1.通过返回的 Location 字段携带信息,例如 Location: /test?data=1
2.放在客户端 cookie 里
http 协议规范里好像没有与转发请求头相关的,所以用 cookie 比较适合你的方案。
jpyl0423
39 天前
用反代能解决吧
deorth
39 天前
要在脑子里打开

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1033742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX