7

私は Django アプリケーションを持っていますが、最近ベータ版を起動する必要があります。Nginx の助けを借りて、現在実行中のアプリケーションを変更せずに、"/beta" で始まるすべてのリクエストをベータ アプリにリダイレクトしたいと考えています。ここに私のconfがあります

    location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 360;
    proxy_pass http://localhost:8000/;
}

location /beta/ {
    rewrite ^/beta/(.*)$ /$1 break;
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 360;
    proxy_pass http://localhost:8001/;
}

これは機能しますが、アプリが 301 応答を返したとき、ほとんどの場合、ユーザーが何らかのリソースにアクセスするためにログインする必要があるときに、URL が古いものになるという問題があります。

たとえば、/eventsログインが必要な場合。

http://example.com/beta/events -> http://example.com/login?next=/events/

アプリケーションコードを変更せずにこれを修正するにはどうすればよいですか? (Nginxソリューション?)

4

1 に答える 1

9

proxy_redirectを試してください。

"このディレクティブは、プロキシ サーバーの応答の応答ヘッダー "Location" と "Refresh" で変更する必要があるテキストを設定します。"

それで

    proxy_redirect http://example.com/ http://example.com/beta/;

もちろん、これはプロキシ サーバーによって発行されたリダイレクトにのみ適用されます。また、すべてのリダイレクトに同じ問題があると想定しています。

ヒント: 必要に応じて、複数の proxy_redirect ディレクティブを使用できます。

于 2013-05-26T15:06:55.657 に答える