Laravel プロジェクトを、nginxに設定する

Laravel プロジェクトを、nginxに設定する方法を解説します。

解説

設定の流れは以下です。

  1. nginxの設定ファイルの編集
  2. nginxの再起動
  3. 「storage」ディレクトリ下のファイル、ディレクトリの所有者の「www-data」への変更

前提

Laravel プロジェクトの作成

Laravel プロジェクトを作成していない場合は、Laravelプロジェクトを作成します。

参考)
Laravel プロジェクトを作成する

これ以降、「hello-laravel」を対象の Laravel プロジェクトとして解説します。

nginx のインストール

nginx をインストールしていない場合は、nginx をインストールします。

参考)
Raspberry Pi に nginx をインストールする

「PHP-FPMモジュール」のインストール

nginxでPHPを実行ためには、「PHP-FPMモジュール」が必要なので、「PHP-FPMモジュール」をインストールしていない場合は、以下のコマンドを実行し、「PHP-FPMモジュール」をインストールします。

存在する「phpX.X-fpm.sock」ファイルの確認

以下のコマンドを実行し、存在する「phpX.X-fpm.sock」ファイルを確認します。



「php8.1-fpm.sock」ファイルが存在しました。

nginxの設定ファイルの編集

nginxの設定ファイルを開く

以下のコマンドを実行し、nginxの設定ファイルを開きます。

ドキュメントルートパスの設定の変更

以下を探します。



以下のように書き換えます。



解説)
もともとあった設定行をコメントアウトし、新たに、Laravelプロジェクト下の「public」ディレクトリのパスをrootとする設定行を追加します。

インデックスファイルの設定の変更

以下を探します。



以下のように書き換えます。



解説)
もともとあった設定行をコメントアウトし、新たに、「index.php」のみをインデックスファイルとする設定行を追加します。

URLに該当するファイルが無い場合は、Laravelに処理を任せる設定の追加

以下を探します。



以下のように書き換えます。



解説)
もともとあった設定行をコメントアウトし、新たに、「URLに該当するファイルがない場合は、ルートのindex.phpにクエリ文字列を渡して処理する」設定を追加した設定行を追加します。

PHPスクリプトをFastCGIサーバーに渡す設定の有効化

以下を探します。



以下のように書き換えます。



解説)
「#location ~ \.php$ {」行のコメントを解除します。
「# include snippets/fastcgi-php.conf;」行のコメントを解除します。
「# fastcgi_pass unix:/run/php/php7.4-fpm.sock;」行のコメントを解除し、存在する「phpX.X-fpm.sock」ファイル名に変更します。
「#}」行のコメントを解除します。

隠しファイルへのアクセス禁止設定

ファイルの末尾の「}」のすぐ上に下記を追記します。



解説)
「.」で始まるファイルや「.」で始まるディレクトリ下のファイルへのアクセスを禁止する、ただし「.well-known」ディレクトリ下のファイルはアクセスを禁止しない、設定を追加します。

nginxの設定ファイルを上書き保存し、閉じる

「ctrl + o」を押下し、ファイルを上書き保存します。
「ctrl + x」を押下し、ファイルを閉じます。

nginxの再起動

以下のコマンドを実行し、nginxを再起動します。

動作確認

他のデバイスからアクセス

他のデバイスから、ブラウザで、以下のURLにアクセスしてみる。
http://[nginxサービスを起動したデバイスのIPアドレス]



Permission deniedが発生していると表示された。

「storage」ディレクトリ下のファイル、ディレクトリの所有者の「www-data」への変更

Permission deniedの発生を解消するために、「storage」ディレクトリ下のファイル、ディレクトリの所有者を「www-data」へ変更します。

プロジェクトディレクトリへ移動

以下のコマンドを実行し、プロジェクトディレクトリに移動します。

所有者の変更

以下のコマンドを実行し、「storage」ディレクトリ下のファイル、ディレクトリの所有者、所有グループを「www-data」に変更します。



コマンドオプション解説)

・-R
指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権を再帰的に変更します。
・www-data:www-data
ファイルやディレクトリの所有者を「:」の前で指定したユーザーに変更します。
ファイルやディレクトリの所有グループを「:」の後で指定したグループに変更します。
・storage/*
所有権を変更するファイルやディレクトリを指定します。今回は、storageディレクトリ下のファイル、ディレクトリをすべて対象として指定しています。

動作確認

ページの再読み込み

Permission deniedが発生していると表示されたURLのページを再読み込みしてみる。



「hello-laravel」プロジェクトのWebページが表示された。

参考ウェブサイト