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

NO IMAGE

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.

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へ設定が反映される。

ソースバンドルの .platform/nginx ディレクトリにカスタムプロキシ設定ファイルがある場合は、そのランタイムの場所にコピーします。

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/platforms-linux-extend.html

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

location / {
    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;
}

参考: Any AWS EB Laravel route getting 404 Not Found nginx/1.16.1

Laravelカテゴリの最新記事