web-dev-qa-db-ja.com

Nginxを使用したリバースプロキシアプリケーションとその静的ファイル

私は非常にシンプルに思える何かをしようとしていますが、それを理解できないので、私は愚かであるか、非常に明白な何かを見逃す必要があります。

サーバーで実行されている複数のWebアプリケーションに、それぞれに一意のプレフィックスを付けてアクセスしたい:

http://mywebserver/app1 -> localhost:9001
http://mywebserver/app2 -> localhost:9002
...

私が理解したことから、Nginxをリバースプロキシとして構成する必要があるため、次のようにしました。

server {
listen 80;
server_name mywebserver;

  location /app1{
    proxy_set_header    Host $Host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_pass          http://127.0.0.1:9001/;
  }
  ...
}

この構成により、http://mywebserver/app1でアプリケーションのホームページにアクセスできますが、静的コンテンツはロードされません。

ブラウザのコンソールを開くと、http://mywebserver/static/custom/index.jsなどではなくhttp://mywebserver/app1/static/custom/index.jsからリソースを取得しようとしていることがわかります。

静的を提供するためにrootディレクティブをロケーションブロックに追加しようとしましたが、静的コンテンツ要求は/ではなく/app1に対して行われるため、考慮されません。

これを修正するには?私が見落としている明らかなものはありますか、それともリバースプロキシの概念を完全に誤解しましたか?

ありがとうございました。

8
aallrd

@sikianからの提案でうまくいきました。ロケーション宣言をlocation /app1 { ... }からlocation /app1/ { ... }に変更しました。

静的ファイルはコンソールでエラーなしに提供され、アプリケーションは完全に機能しているようです。

6
aallrd