🔧

【EB + Laravel + nginx】404でハマった件と解決策

2022/08/24に公開

Elastic beanstalkでLaravelアプリをデプロイ。
しかし、ルート以外は「404」が表示されるという事象になった。

原因

EBでは2020年4月30日から、apacheではなくnginxで自動構成される。
そのため、Laravelが動作するようにnginxに設定を追加する必要がある。

I encountered the same issue, since April 30th 2020 EB is auto configured to nginx instead of apache so the htaccess file no longer works.
https://stackoverflow.com/questions/61640771/any-aws-eb-laravel-route-getting-404-not-found-nginx-1-16-1

解決方法

まずはlaravelプロジェクトの中に以下のようにディレクトリを作成する。

YouAreProject/.platform/nginx/conf.d/elasticbeanstalk

作成した「elasticbeanstalk」ディレクトリの中に「laravel.conf」と名前をつけてファイルを作成する。
こうすることで、EBデプロイされるたびに、nginxへ設定が反映される。
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/platforms-linux-extend.html

あとは作成した「laravel.conf」に以下の内容を追加して、デプロイすれば解決します。

{
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
}

ちなみに、Classic Load Balancerを利用していて、httpsも設定済みであれば、以下のようにすれば自動でリダイレクトしてくれる。

location / {
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
}

if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
}

Discussion