Nginx 对其中一个重写正确,但对另一个重写不正确

Nginx 对其中一个重写正确,但对另一个重写不正确

基本上,我正在尝试使用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;
    }
}

相关内容