web-dev-qa-db-ja.com

Nginxを介してNextJS静的アセットを提供できません

NextJSアプリをポート3000で実行していて、test.icoファイルは次の場所にあります:

/static/images/icons/

このファイルは、実際のパスではなくルートから提供されます。 https://www.schandillia.com/static/images/icons/test.icoではなく、 https://www.schandillia.com/test.icoとして利用可能にしたい。このファイルを提供するようにExpressサーバーを簡単に構成できますが、Nginxにこれを処理させたいです。そのため、Nginx confサーバーブロックに次の構成を追加しました。

location / {
    proxy_pass http://127.0.0.1:3000;
    charset UTF-8;
    proxy_http_version 1.1;
  }
  location /test.ico {
    proxy_pass http://127.0.0.1:3000/static/images/icons/test.ico;
    expires 365d;
    add_header Pragma public;
    add_header Cache-Control "public";
  }
  location ~* \.(?:ico|svg|woff|woff2|ttf|otf|css|js|gif|jpe?g|png)$ {
   proxy_pass http://127.0.0.1:3000;
   expires 365d;
   add_header Pragma public;
   add_header Cache-Control "public";
  }

ただし、https://www.schandillia.com/test.icoが404をスローするようになりました。違う?

2
TheLearner

正規表現locationは、通常のprefixよりも優先されますlocationブロック。詳細は このドキュメント を参照してください。

代わりに次のいずれかを使用して、優先順位を変更できます。

location = /test.ico
location ^= /test.ico
location ~ ^/test.ico
2
Richard Smith