LAN上にURLhttps://10.0.0.22
のWebサーバーがあり、インターネットからhttps://domain.com/my/web/app
のようなURLのnginxリバースプロキシを介してアクセスしようとしています。
私が抱えている問題は、ローカルサーバーが302リダイレクトを/login.php
に送信し、nginxが外部クライアントのブラウザに戻ってhttps://domain.com/login.php
ではなくhttps://domain.com/my/web/app/login.php
になることです。 https://domain.com/login.php
には何もないため、これにより404エラーが発生します。
幅広いrewrite
、proxy_redirect
、およびproxy_buffering
ディレクティブを含む、多くの異なるオプションをほとんど成功せずに試しましたが、これは私ができる限り近いものです。
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
}
内部Webサーバーの302リダイレクトが/login.php
に外部的に/my/web/app/login.php
として現れるようにnginxを構成する方法はありますか?
さまざまな組み合わせとディレクティブの順序を継続的に調査およびテストした後、proxy_redirect
ディレクティブの後に proxy_pass
を追加すると、URI変換の問題が修正されるようです。
proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;
さらにいじくり回した後、proxy_redirect
をdefault
に設定すると、同じことが暗黙的に行われるようです。
proxy_redirect default;
完全なロケーションブロックは次のようになります。
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
#proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;
proxy_redirect default;
}
ただし、ローカルサーバー上の/images
を指しているため、画像はまだ壊れていました。 nginxでそれらを翻訳する方法はわかりません(HTMLボディに埋め込まれているため)。しかし、今のところ問題を回避するために、/images
専用のlocation
ブロックを追加できましたbefore/my/web/app
のロケーションブロックは、次のようになります。
location ^~ /images/
{
proxy_pass https://10.0.0.22/images/;
proxy_redirect default;
}