基本上,我正在尝试使用proxy_pass
指令来调用远程 API。
到目前为止,这是我得到的:
server {
location /a {
proxy_pass https://a.com;
rewrite ^/a(.*)$ $1 break; # no trailing slash, defined in application code
}
location /b {
proxy_pass https://b.com;
rewrite ^/b(.*)$ $1 break; # no trailing slash, defined in application code
}
location / {
# Rest of configuration
}
}
我坚持这样一个事实:它location /a
可以正常工作,但location /b
由于某种原因却不能HTTP/404
。
我尝试使用尾部斜杠来实现location /b
这种方式
location /b/ {
proxy_pass https://b.com/;
rewrite ^/b/(.*)$ $1 break;
}
但这也不起作用。
任何帮助都非常受欢迎。
答案1
我找到了我的特定问题的答案。
这两个 API 服务器的配置方式不一样,所以我必须稍微调整一下 nginx 配置。
- 服务器
b.com
需要proxy_set_header Host $host
指令但无rewrite
指令 - 服务器
a.com
需要rewrite
指令,但不需要proxy_set_header Host $host
这让我得到以下(对我有用的)配置:
server {
location /a {
proxy_pass https://a.com;
rewrite ^/a(.*)$ $1 break;
}
location /b {
proxy_set_header Host $host;
proxy_pass https://b.com;
}
}