web-dev-qa-db-ja.com

nginxリバースプロキシ302をルートではなくURIサブフォルダーにリダイレクトする

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エラーが発生します。

幅広いrewriteproxy_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を構成する方法はありますか?

6
Steve HHH

さまざまな組み合わせとディレクティブの順序を継続的に調査およびテストした後、proxy_redirectディレクティブの後に proxy_pass を追加すると、URI変換の問題が修正されるようです。

 proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;

さらにいじくり回した後、proxy_redirectdefaultに設定すると、同じことが暗黙的に行われるようです。

 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;
    } 
6
Steve HHH