Nginx リバース プロキシと URL 書き換え

Nginx リバース プロキシと URL 書き換え

リバース プロキシで URL を書き換えて、最初のセグメントを削除し、後続のセグメントはそのまま残したいのですが、プロキシ パスに到達する前にこれを行う必要があります。

例:

/admin/auth/local ----> (REWRITES TO) /auth/local
/admin/auth/register -------> (REWRITES TO) /auth/register

私の場所ブロック:

  location /admin {
        #add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass_header Set-Cookie;
        proxy_read_timeout                 30;
        proxy_buffers 64 8k;
        rewrite /admin / break;
        proxy_pass http://127.0.0.1:9000;

次のことを試しましたが、うまくいきませんでした。

rewrite /admin / break;

答え1

ここには 2 つの部分があります。1 つ目は、nginx が受信リクエストを 経由でルーティングする方法ですproxy_pass

次の構成を使用して、受信リクエストをプレフィックス/付きのバックエンドにマップできます。/admin/

location / {
    proxy_pass http://127.0.0.1:9000/admin/;
}

声明は必要ありませんrewrite

2 番目の部分は、で実行されているアプリケーションによって生成される URL です。nginxルーティング設定に一致する URL を持つように、プレフィックス127.0.0.1:9000なしで URL を生成するようにアプリケーションを構成する必要があります。/admin

Nginx は、バックエンドによって生成されたコンテンツに対してこの変更を確実に実行することはできません。

答え2

最初のセグメント (管理者) をプロキシ パスに追加するだけでよいと思います。

proxy_pass http://www.example.com/admin/;

答え3

次のスニペットを試すことができます。私の場合はうまくいきました。

location ~* /admin/(.*) {
  ...
  rewrite .* /$1 break;
  proxy_pass http://127.0.0.1:9000;
}

(.*)最初の行の は、ブロック内で として取得されます。 の後の URI を取得し、すべてをその URI に置き換えるという$1考え方です。admin/

関連情報