我有以下设置并配置为将所有 /api 请求发送到不同的服务器:
location /api {
proxy_pass https://myapp.herokuapp.com;
rewrite ^/api/(.*) /$1 break;
}
我的应用程序发送一个标头(USER_CUSTOMER),当从应用程序直接与 myapp.herokuapp.com 通信时,它可以工作,但是当通过代理服务器请求时,该值在 API 服务器上显示为 NULL。
以下内容在 NGINX 中有效,但我需要应用程序能够设置 USER_CUSTOMER 的值。
location /api {
proxy_pass https://app.herokuapp.com;
proxy_set_header USER_CUSTOMER ABC;
rewrite ^/api/(.*) /$1 break;
}
我将来可能会发送其他标头,因此我希望有一个标志可以将所有标头从代理传递到 API 服务器。
Ubuntu
nginx/1.1.19
答案1
标头属性 USER_CUSTOMER 语法无效。下划线在标头属性中无效。
有一个解决方法,但最好的解决方案是将属性重写为有效的语法。
解决方法是在配置中指定服务器名称的地方进行以下设置:
underscores_in_headers on;
答案2
我认为您正在寻找proxy_pass_request_headers
选项。将其设置为开启:
location /api {
proxy_pass_request_headers on;
proxy_pass https://app.herokuapp.com;
proxy_set_header USER_CUSTOMER ABC;
rewrite ^/api/(.*) /$1 break;
}
答案3
我今天(2022 年 7 月)遇到了这个问题,并通过/
在位置路线中添加最后一个选项进行了修复。
我的意思是,这对我来说不太好用
location /api {
proxy_pass https://myapp.herokuapp.com;
rewrite ^/api/(.*) /$1 break;
}
但是当我将其定义为:
location /api/ {
proxy_pass https://myapp.herokuapp.com;
rewrite ^/api/(.*) /$1 break;
}
成功了。不确定最后的斜线起什么作用,但也许这对某些人有帮助。