![Nginx は一方に対しては正しく書き換えるが、もう一方には書き換えない](https://rvso.com/image/769276/Nginx%20%E3%81%AF%E4%B8%80%E6%96%B9%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%81%AF%E6%AD%A3%E3%81%97%E3%81%8F%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%8C%E3%80%81%E3%82%82%E3%81%86%E4%B8%80%E6%96%B9%E3%81%AB%E3%81%AF%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%AA%E3%81%84.png)
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;
}
}