21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel公式で紹介されているNginxの設定の理屈が分からない人向け

Last updated at Posted at 2019-08-29

概要

Laravelの↓で紹介されているNginxの設定でなぜ動くのかの解説
https://readouble.com/laravel/5.8/ja/deployment.html

解説

location / 部分の設定

↓の部分の try_files の役割は下記の通りになっている。

  • $url にファイルがあるか
  • $url/(/で終わるファイルパスなので、要はディレクトリ)にディレクトリがあるか
  • ↑がなければ、/index.php$query_string へ内部リダイレクトする
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ 部分の設定

基本的に location / の結果としてindex.phpになって内部リダイレクトされている前提になる。
index.phpで内部リダイレクトされるので、location ~ \.php$ にマッチする。

あとは、location ~ \.php$の設定に従い、php-fpmを経由してLaravelの開始スクリプトのindex.phpが実行されるという流れ。

ちなみに、↓部分は、Laravelがいるサーバ(=php-fpmが起動しているサーバ)のLaravelのindex.phpのパスを指定されていれば良いので、

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

Laravelのindex.php/laravel/public/index.php にいる場合、↓のようにベタ書きしても動く。

fastcgi_param SCRIPT_FILENAME /laravel/public/index.php;

余談1

ベタ書きした場合でもSCRIPT_FILENAMEの末尾には$query_stringは不要
※Laravel側でちゃんとパラメータは取れる

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

try_files $uri $uri/ /index.php;
にするとLaravelにパラメータが来なくなる。

余談2

下記の状態の場合、

リクエスト:http://localhost/aa?aaaa=123
root:/usr/share/nginx/html/

location ~ \.php$に来た時、↓になる。

$realpath_root:/usr/share/nginx/html
$fastcgi_script_name:index.php
$query_string:aaaa=123

$query_stringはphp-fpmに渡す必要ないけど

21
21
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
21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?