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

2024-04-18 21:37:28 +08:00
 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;

}

3182 次点击
所在节点    程序员
29 条回复
jifengg
2024-04-19 10:56:26 +08:00
试了下,启动一个 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
2024-04-19 11:47:24 +08:00
nginx 加了是 response header ,307 是指 request header ,不是一个东西。
coolloves
2024-04-19 12:25:57 +08:00
cookie 试试?
设置 cookie 时指定了 Domain 属性为.test.com
比如你内网你解析一个 a.test.com,然后重定向到 b.test.com,这时候,cookie 可以 share 的吧?
proxytoworld
2024-04-19 13:00:29 +08:00
为什么不反代呢
feixiangcode
2024-04-19 13:45:39 +08:00
302 是服务器给终端发送一个 HTTP 的状态码,具体的跳转行为是终端拿到 Location 自己做的跳转。服务器只发状态码,跟数据无关。
dyllen
2024-04-19 14:04:49 +08:00
你这配置明显就是错的,用的 proxy_set_header 指令,又 return 302 ,302 又不是转发请求,ng 服务器访问不了外网,就不能用它来代理访问外网的请求。
NeedI09in
2024-04-19 14:36:11 +08:00
1.通过返回的 Location 字段携带信息,例如 Location: /test?data=1
2.放在客户端 cookie 里
http 协议规范里好像没有与转发请求头相关的,所以用 cookie 比较适合你的方案。
jpyl0423
2024-04-19 16:51:24 +08:00
用反代能解决吧
deorth
2024-04-20 12:23:32 +08:00
要在脑子里打开

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

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

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

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

© 2021 V2EX