web-dev-qa-db-ja.com

nginx設定とスパおよびサブディレクトリルート

私はいつもnginxの構成に問題があるようです。私のSPAは/ mnt/q/app(pushstateが有効)にあり、フロントエンドのルートはclient/publicにあります。すべてをindex.htmlにマッピングする必要があります。アプリはルートを取得して、何をするかを決定します。

インデックスへのフルパスは/mnt/q/app/client/public/index.html

私は今までに選択肢を使い果たしたと思います。私が何をしても、nginxから404が返されるだけです。構成は十分に単純で、何が問題なのかわかりません。

server {
    listen 80;
    server_name app.dev;

    root /mnt/q/app;

    location / {
      root /client/public;
      try_files $uri @rewrites =404;
    }

    location @rewrites {
       rewrite ^(.+)$ /index.html last;
    }
}

どんな助けでもありがたいです。

7
marekpw

nginxがルートからファイルシステムを表示する場合、root/mnt/q/app/client/publicに設定する必要があり、使用している2つの値のいずれかではありません。

try_filesディレクティブの最後の要素は、デフォルトのアクション(/index.htmlなど)、名前付きの場所、または応答コードにすることができます。最後から2番目の要素に名前付きの場所があります-これは無視されます。

名前付きの場所は機能するはずですが、try_filesはより簡単に実装できるため、不要です。詳細は このドキュメント を参照してください。

例えば:

root /mnt/q/app;

location / {
    root /mnt/q/app/client/public;
    try_files $uri $uri/ /index.html;
}

location /api {
}

location /auth {
}

$uri/要素は、末尾に/をディレクトリに追加するため、indexディレクティブは機能します-不要な場合は追加する必要はありません。

11
Richard Smith