NginxでLaravelに想定通りに設定できない。

実現したいこと

localhost:8000番で、
/~ にアクセスした場合、Reactのindex.htmlをレスポンスする。
/api/~ にアクセスした時、 Laravelの api.phpに設定したJsonテキストがレスポンスされる様にしたい。
(通常 /にアクセスした場合laravelのindex.phpが返ってくるところをReactのindex.htmlを表示するようにしたい。)

現状

localhost:8000/ にアクセスしたところ、想定通りReactのindexページが表示させるが、localhost:8000/api/sampleにアクセスしたところ、404エラーが返ってくる

前提

Docker上に Nginx、php(Laravel)、Reactのコンテナを作り、それぞれエラーなくコンテナが起動している状態。
以下はnginxのdefault.comfです。

default.conf

1server { 2 listen 80; 3 listen [::]:80; 4 server_name localhost; 5 root /var/www/html; 6 # React Application 7 location / { 8 root /var/www/html/ibst-app/build; 9 try_files $uri $uri/ /index.html; 10 } 11 12 # Laravel API 13 location ~ ^/api/ { 14 root /var/www/html/public; 15 try_files $uri $uri/ /index.php?$query_string; 16 17 location ~ \.php$ { 18 fastcgi_pass php-app:9000; 19 fastcgi_index index.php; 20 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 21 include fastcgi_params; 22 } 23 } 24 25 # Error Pages 26 error_page 500 502 503 504 /50x.html; 27 location = /50x.html { 28 root /var/www/html/public; 29 } 30} 31

試したこと

いろいろ試したのですが、一番惜しいと言うか問題を把握出来そうな事柄をピックアップして書きます。

  • リストReactの排除一度、問題の分離をするために、Reactのコンテナを停止して、default.confのReactに関する箇所をコメントアウトした。

具体的には location / {} の部分をコメントアウトした。
この状態で再度試すと。localhost:8000/ を含め全て404になった。

  • 次に、laravelの pathを 今まで location ~ ^/api/ {} にしていたのを location / {} にしてlocalhost:8000/にアクセスした場合- リスト、laravelのダッシュボードが表示され、この状態でlocation /api/sample にアクセスしたところ、期待通り、Jsonテキストが表示された。
  • ならばと思い、location ~ ^/api/{} に設定した状態で、localhost:8000/api/api/にアクセスしたがやはり404だった。

自分なりの考察
以前、Laravelを使用した際は locaation / {} で期待通り index.phpが表示され問題なかったのですが、今回はapi機能のみを使用したいので、このような仕様にしています。しかしlaravelがindexにパスを通すときにルートを期待しているために/api/がルートとみなさせず、想定通りの動きをしていないのだと考えた。
しかし、それを踏まえてもどこを改善すればいいのわからず、助言を頂けないかとこちらで質問させていただきました。

コメントを投稿

0 コメント