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

私の特定の問題に対する答えを見つけました。

2 つの 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;
    }
}

関連情報