Nginx - サブフォルダー内のノード API と / 上の静的ファイル

Nginx - サブフォルダー内のノード API と / 上の静的ファイル

/api/サブフォルダーから API サーバー (ノード上で実行) にアクセスし、他のすべてのリクエストを Angular アプリに送信できるようにしたいと考えています。

現在、API は別のサブドメインで実行されており、設定は次のようになります --

server {
  listen       80;
  server_name  appapi.site.com;
  location / {
    proxy_pass          http://localhost:3000/;
    proxy_http_version 1.1;
    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_read_timeout 1800;
    proxy_connect_timeout 1800;
  }
}


server {
  listen 80;
  server_name app.site.com;
  index index.html;
  root /var/www/html/app.site.com/;

  location / {
    try_files $uri /$uri /index.html;
  }
}

API の場所を/api/ではなく に変更しようとしました/が、アプリにアクセスできなくなりました。

ノードから静的ファイルを提供したくないので、それを提案しないでください。

答え1

http://app.site.com/api/xxxパスに 2 番目のロケーション ブロックを追加すると、で始まるすべての URI がプロキシに/api/送信され、それ以外は Angular アプリに送信されると思います。/api/

server {
  listen 80;
  server_name app.site.com;
  index index.html;
  root /var/www/html/app.site.com/;

  location / {
    try_files $uri /$uri /index.html;
  }

  location /api/ {
    proxy_pass          http://localhost:3000/;
    proxy_http_version 1.1;
    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_read_timeout 1800;
    proxy_connect_timeout 1800;
  }
}

プロキシ設定ではパスから/api/を削除せず、URIはAPIサーバーに完全な形で提示されます。これは、proxy_pass http://localhost:3000/https://stackoverflow.com/questions/22759345/nginx-trailing-slash-in-proxy-pass-url詳細については、こちらをご覧ください。

関連情報