LoginSignup
0
0

Laravelとnginxを設定するファイルについてまとめる

Last updated at Posted at 2024-01-16

概要

Laravelの公式ドキュメントに従って、Laravelとnginxを接続するために、nginx.confを設定し直す必要があった。

server{

   root   /var/www/sample/public; 

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

    location ~ \.php$ {      
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}

→その際に主に変更した

  1. rootディレクティブ
  2. try_filesディレクティブ
  3. locationディレクティブ
  4. location ~ .php$ {}部分のFast-CGIの設定

に関して、変数やディレクティブの機能をまとめる。

そもそもディレクティブとは

  • ディレクティブとは、nginx上で各設定を定める項目のこと。
  • ;(セミコロン)もしくは{}(ブレース)で区切られる。

1.rootディレクティブ

構文 root ディレクトリパス;
役割 サーバの公開するディレクトリを指定する。
  • ファイルシステム上の参照されるパス 
    = 絶対URIのパス部分 + rootディレクトリで示されたパス

  • (例) Laravelのプロジェクト(sample)が
    /var/www/htmlの配下にあり、「http://sample.com/」で表示させたい時。

    • ファイルシステム上で参照されるパスは「/var/www/html/sample/public
      • Laravelの実行は/public/index.phpが処理の起点。
        なので、publicディレクトリまで指定する。
    • 絶対URIのパス部分は/
    • rootディレクトリで示されるのは「/var/www/html/sample/public」である。

2.try_filesディレクティブ

構文 try_files ファイルパス [ファイルパス] … 転送先のURI ;
役割 指定したファイルパスが存在する場合はその内容を返し、存在しない場合は転送先のURIにリダイレクトする
  • (例) location / { try_files $uri $uri/ /index.php?$query_string; }
    • $uriはリクエストされたパスを示す変数。ここでlocationディレクティブの外のrootディレクティブを$uriが指しているとする
  • すると(例)の読み方は、以下のようになる。
  1. $uriは存在するかの確認
  2. $uriがない場合、$uri/はあるか確認(/で終了しているので、つまりディレクトリ)は存在するか
  3. 上二つにあてはらない場合/index.php?$query_stringにリダイレクトする。

3.locationディレクティブ

構文 location URI {…(設定)…};
役割 URIごとに設定を定めることができる

 (例) 

//httpディレクティブ内において

server {    //serverディレクティブはサーバごとの設定をできる

server_name www.sample.com;  
root /var/www/html;  

location /text/ {設定A}
}

→http://www.sample.com/text/にアクセスしたら設定Aが反映される。

4. location ~ .php$ {}部分のFast-CGIの設定

  • 以下がFast-CGIの設定 がされているコード部分
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
  • \.php$ は正規表現でURIが.phpで終わる場合にこの中の設定が反映される。
    • ~はlocationでのURIに正規表現(大文字小文字を区別)が
      使われることを示す修飾子
    • \が直後の文字をエスケープ処理する正規表現。今回は「.」をエスケープ処理
    • $は末尾がその文字で終わることを示す正規表現。今回は「p」 で終わらなければならない。
  • nginxはphp-fpmを経由してLaravelと接続する。
  • しかし、nginxとphp-fpmはプロトコルが異なるので、UNIXドメインソケット通信をしなければらない。
    • UNIXドメインソケット通信とは、プロセス間のデータのやり取りを行う仕組みの一つである。UNIX ドメインソケットによるプロセス間通信ではファイルシステムを利用し、 nginx プロセスと php-fpm プロセスの通信を行っている。
構文 fastcgi_pass unix:UNIXドメインソケットファイル;
役割 FastCGIサーバへUNIXドメインソケット通信をする

→この時UNIXドメインソケットファイルに関しては,
/etc/php-fpm.d/www.conf内に記述されているlistenするファイル先を指定する。

構文 fastcgi_index ファイル名;
役割 $ fastcgi_script_name変数の値で、スラッシュで終わるURIの後に追加されるファイル名を設定される。

→上のコードでは/で終わった場合、index.php$ fastcgi_script_name変数の値として渡される。

構文 fastcgi_param パラメータ ;
役割 FastCGI サーバに渡されるべきパラメータを設定

→今回はFastCGIサーバへ渡すスクリプトを定める引数SCRIPT_FILENAMEとして、$document_root$fastcgi_script_nameが渡される。
→変数$document_rootはルートディレクティブのパスであり、$fastcgi_script_namefastcgi_indexディレクティブで定めたindex.phpである。

構文 include ファイル名;
役割 指定された他の設定ファイルを読み込む

→今回、FastCGI用の変数を定義するファイルである「fastcgi_params」を読み込んでいる。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0