前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决nginx反向代理proxy不能转发header报头

解决nginx反向代理proxy不能转发header报头

作者头像
王图思睿
发布2021-06-16 16:06:25
4K0
发布2021-06-16 16:06:25
举报
文章被收录于专栏:膨胀的面包膨胀的面包

使用 nginx 做负载均衡或 http 代理时,碰到 http header 不转发的问题。

配置里只有转发设置原始 ip 和 host 的

代码语言:javascript
复制
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header     X-Forwarded-Server $host;

请求的内容也是正确的。

后来我在 nginx.conf 把 error 的日志等级更改为 debug,查看 error_log logs/error.log debug;

发现读取信息如下:

代码语言:javascript
复制
2017/11/20 14:27:56 [info] 5625#0: *1078154 client sent invalid header line: "access_token: JhbGciOiJSUzI1NiJ9.eyJqdGkiOiJKV1Q6NmJlNmE3ODUtMmNiZS00NTkwLThkYmQtMzI4MTI0ZTRjZDBiIiwiaWF0IjoxNTExMTU3NTkzLCJzdWIiOiJ7XCJjcmVhdGVUaW1lXCI6XCIyMDE3LTA3LTEwIDA5OjU5OjMyXCIsXCJlbWFpbFwiOlwiYWRtaW5AbTJjLmNvbVwiLFwibmFtZVwiOlwiYWRtaW5cIixcIm5vdGVcIjpcIm5vdGVcIixcInBlcm1pc3Npb25LZXlcIjpcIkpXVDpTWVNURU06UEVSTUlTU0lPTpkYmRjMjQ1ZGM5Mjg0MmY3OTAxY2ZjNGZiOWU3ZmY1OVwiLFwicm9sZUlkXCI6XCIxXCIsXCJ0ZWxOb1wiOlwiMTM4Mjg3NDk3NTVcIixcInVwZGF0ZVRpbWVcIjpcIjIwMTctMTEtMTcgMTY6MTY6MTdcIixcInVzZXJJZFwiOlwiNmM3MTFlOGUzZjA1MTIzNDUwZDgzMGI5NGM3MDRjY2E3OTlmXCIsXCJ1c2VyTmFtZVwiOlwiYWRtaW5cIixcInVzZXJOb1wilwiMVwiLFwidXNlclN0YXR1c1wiOlwiTk9STUFMXCJ9IiwiZXhwIjoxNTExMjAwNzkzfQ.ZrUmlI0FSC0FjUwXvReuj4YlHYyCdJrDx9e9B1OEazO3avmMEsGjZoWxxxxxxxAbtqv5sFa64_U0GL-RdE9fkQRWE9k8pSjYs34mOYI1qN_m3ZdbbEGioJ4OrY_IJj3qax5BPP9g9AejhFM9y8Z7zt7SV6YU" while reading client request headers, client: 10.0.40.102, server: api.xxxxxx.com, request: "GET /xxx.operxxxx/role/auth/get/modules?systemAccessToken=JhbGciOiJSUzI1NiJ9.eyJqdGkiOiJKV1Q6NmJlNmE3ODUtMmNiZS00NTkwLThkYmQtMzI4MTI0ZTRjZDBiIiwiaWF0IjoxNTExMTU3NTkzLCJzdWIiOiJ7XCJjcmVhdGVUaW1lXCI6XCIyMDE3LTA3LTEwIDA5OjU5OjMyXCIsXCJlbWFpbFwiOlwiYWRtaW5AbTJjLmNvbVwiLFwibmFtZVwiOlwiYWRtaW5cIixcIm5vdGVcIjpcIm5vdGVcIixcInBlcm1pc3Npb25LZXlcIjpcIkpXVDpTWVNURU06UEVSTUlTU0lPTjpkYmRjMjQ1ZGM5Mjg0MmY3OTAxY2ZjNGZiOWU3ZmY1OVwiLFwicm9sZUlkXCI6XCIxXCIsXCJ0ZWxOb1wiOlwiMTM4Mjg3NDk3NTVcIixcInVwZG0ZVRpbWVcIjpcIjIwMTctMTEtMTcgMTY6MTY6MTdcIixcInVzZXJJZFwiOlwiNmM3MTFlOGUzZjA1MTIzNDUwZDgzMGINGM3MDRjY2E3OTlmXCIsXCJ1c2VyTmFtZVwiOlwiYWRtaW5cIixcInVzZXJOb1wiOlwiMVwiLFwidXNlclN0YXR1c1wiOlwiTk9STUFMXCJ9IiwiZXhwIjoxNTExMjAwNzkzfQ.ZrUmlI0FSC0FjUwXvReuj4YlHYyCdJrDx9e9B1OEazO3avmMEsGjZoWxxxxxxxAbtqv5sFa64_U0GL-RdE9fkQRWE9k8pSjYs34mOYI1qN_m3ZdbbEGioJ4OrY_IJj3qax5BPP9g9AejhFM9y8Z7zt7SV6YU&roleId=SYSRC849xxxC7xx5CA64D349D6A03AAE2C511F4 HTTP/1.1", host: "api.xxxxxxx.com"

提示客户端发送无效的 header 信息。

原来是对 header name 的字符做了限制,默认 underscores_in_headers 为 off,表示如果header name 中包含下划线,则忽略掉。

恰好我自定义的 header 中都是用的下划线。

处理办法:

1、配置中 http 部分 增加 underscores_in_headers on; 配置

2、用减号 - 替代下划线符号 _,避免这种变态问题。nginx 默认忽略掉下划线可能有些原因。

可以加到 http 或者 server 中

语法:underscores_in_headers on|off 默认值:off 使用字段:http, server 是否允许在 header 的字段中带下划线。

via: 解决nginx反向代理proxy不能转发header报头_禅剑一如的技术博客_51CTO博客 https://blog.51cto.com/yanconggod/1983494

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档