以前、LaravelにSPAを組み込む時に考えたディレクトリ構成とnginxのconfファイルというタイトルの記事を書いたが、そこで記載したnginxのconfが不十分だったため、改めて問題点を整理、解決した。
リロードしても常にindex.htmlを返すように設定する必要がある。
こんな感じでtry_filesを使ってconfを設定する。
location / {
try_files $uri $uri/ /index.html;
}
index.htmlでjsファイルのパスを
<script type="text/javascript" src="./dist/bundle.js"></script>
と指定していため、/dashboard/post
などにアクセスすると
/dashboard/post/dist/bundle.js
とリソースを返すようになってしまっていた。
URIに関係なく常にbundle.jsを参照できるように絶対パスを指定するようにした。
<script type="text/javascript" src="/dist/bundle.js"></script>
割と解決に時間がかかったが、nginx側なのか、アプリーケーション側なのか問題を切り分けて考えてみるとすぐに理解できた。