nginx http请求头自定义参数经过nginx 转发后,自定义参数没有值

在尝试调用第三方接口时遇到了跨域问题,通过Nginx配置代理转发解决了该问题。然而,进一步在Header中添加参数时遇到问题,起初误以为是HTTP问题,后经排查确认为Nginx配置不完整。在Nginx的http配置中添加了相关设置后,成功实现了参数传递并能通过Postman正常调用。

公司有个需要,需要调用其他供应商的接口,但是供应商的接口不改,导致跨域,就想着用nginx做代理转发,使用nginx转发后,立马发现成功了
成功了,就准备了放入参数调用,这时候发现放在header中的参数无法被接受,然后排查,先发现是http的问题,后面试着用postman调用,也不行,这时候就发现是nginx的问题,然后发现是要加配置,在http配置中加
在这里插入图片描述
加入后,调式ok

Nginx转发客户端的自定义请求头,需要使用 `proxy_set_header` 指令来显式地设置需要转发请求头字段。默认情况下,Nginx转发一些标准的请求头,但自定义请求头(如 `X-Custom-Header`)不会被自动转发,需要手动配置。 以下是一个基本的配置示例,展示如何转发客户端的自定义请求头: ```nginx location / { proxy_pass http://backend_server; # 转发标准请求头 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 转发自定义请求头 proxy_set_header X-Custom-Header $http_x_custom_header; } ``` 在这个配置中: - `proxy_pass` 指令用于指定后端服务器的地址。 - `proxy_set_header` 指令用于设置请求头字段。对于自定义请求头,如 `X-Custom-Header`,使用 `$http_x_custom_header` 变量来获取客户端发送的该请求头,并将其转发给后端服务器。 需要注意的是,`$http_x_custom_header` 是 Nginx 中用于获取客户端请求头 `X-Custom-Header` 的变量。Nginx 会自动将客户端的请求头转换为小写,并将连字符(`-`)转换为下划线(`_`),因此 `X-Custom-Header` 在 Nginx 中对应的变量名为 `$http_x_custom_header`。 此外,如果希望确保 Nginx 正确地转发所有请求头,包括自定义请求头,可以考虑使用 `proxy_pass_request_headers on;` 指令[^1],但这通常不是必需的,因为通过 `proxy_set_header` 显式设置请求头更为安全和灵活。 ### WebSocket 请求头转发 对于 WebSocket 连接,除了转发常规的请求头外,还需要特别注意转发 `Upgrade` 和 `Connection` 请求头,以便通知后端服务器客户端希望升级协议: ```nginx location /websocket/ { proxy_pass http://backend_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 其他标准和自定义请求头转发 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Custom-Header $http_x_custom_header; } ``` 此配置确保了 WebSocket 协议升级请求能够正确地从客户端传递到后端服务器。 ### 根据请求头转发到不同后端 如果需要根据不同的请求头请求转发到不同的后端,可以在 `server` 或 `http` 块中使用 `if` 语句来设置变量,并基于这些变量来决定请求转发目标: ```nginx set $backend http://default_backend; if ($http_x_custom_header = "special_value") { set $backend http://special_backend; } location / { proxy_pass $backend; proxy_set_header Host $host; proxy_set_header X-Custom-Header $http_x_custom_header; } ``` 以上配置中,`if` 语句检查 `X-Custom-Header` 的,如果匹配特定,则更改 `$backend` 变量的,从而改变请求转发目标。 通过上述配置,可以有效地在 Nginx 中实现客户端自定义请求头转发,无论是对于普通的 HTTP 请求还是 WebSocket 请求。这些配置提供了灵活性,使得可以根据实际需求调整请求头的处理方式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值