2017-05-21 8 views
1

私はいつもnginxの設定に問題があるようです。私のSPAは/ mnt/q/appにあり(pushstateは有効)、フロントエンドルートはclient/publicにあります。すべては、アプリケーションがルートを取得し、何をすべきかを決定するindex.htmlにマップする必要があります。スパムとサブディレクトリのルートを持つnginxの設定

インデックスへのフルパスは/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; 
    } 
} 

何か助けていただければ幸いです。

答えて

2

nginxがルートからファイルシステムを表示する場合、root/mnt/q/app/client/publicに設定し、使用している2つの値のどちらも設定しないでください。

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

try_filesはより簡単に実装できるため、名前のある場所は機能するはずですが不要です。詳細については、this documentを参照してください。例えば

indexディレクティブは働くことができるように

root /mnt/q/app; 

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

location /api { 
} 

location /auth { 
} 

$uri/要素は、ディレクトリへの末尾/を追加します - あなたは、あなたがそれを必要としない場合は、それを追加する必要はありません。

+0

ありがとうございます。しかし、私は将来、複数の場所を追加したいと考えています。たとえば、apiとauthコンポーネントを追加します。パスは/ mnt/q/app/api /と/ mnt/q/app/authにありますが、/ apiと/ authに置いてください。それぞれ、 私はこのアプローチでそれを実現できるかどうかはわかりません。私はこの要点を "テンプレート"として使用しました:https://gist.github.com/aotimme/5006831 – marekpw

+0

ローカルパスは、 'root '値をURIと連結することで形成され、'/api'と '/ auth 'ブロックは' root '(外側のブロックから継承することができる)に同じ値を使用します。私は '/ index.html'はあなたの質問で言及されたファイルのURIであると推定しました。これは' root'に対して別の値を必要とします。アップデートを参照してください。 –

+0

ありがとう、それは私の問題を解決しました。 – marekpw

関連する問題