目次
WSL2のUbuntu20.04LTSにインストールしたNginx・php-fpm(php8.1)の初期設定
WebサーバーNginxとphp8,1を連携して動かす設定をします。
WSL2:Ubuntu20.04LTSに、以下の記事でインストールしたところからの続きです。
PHPとWebサーバーの連携について
設定する前に、PHPとWebサーバーの連携の仕方を確認します。
大きくわけて2通りあります。
です。
PHPモジュールモード
PHPモジュールモードはApacheのモジュール版のことです。
PHPモジュールモードではPHPはrootユーザで実行されます。
Webサーバーのプロセスの中で実行されるので高速化が期待できます。
ですが、rootで実行されることで共用サーバーなどでは他のユーザのファイルが参照できてしまうというセキュリティ面での不安要素ももってます。
CGIモード
CGIは「Common Gateway Interface」の略です。
NginxはCGIモードしか使えません。
CGIモードは、Webサーバープログラムを実行する仕組みでPHPを実行します。
ユーザー権限でPHPを実行し、Webサーバーと別のプロセスになるので、セキュリティ的には気を遣う部分が少ないですし、ディレクトリごとにPHPのバージョンなどを変えることができるなど、運用の柔軟性もあります。
従来のCGIだとPHPの読み込みを行い別プロセスで実行するオーバーヘッドが馬鹿にならないので、仕組み的に遅いといわれてました。
ですが、その欠点をカバーするため、立ち上がったプロセスを終了させることなく保持することで、処理の高速化、負荷軽減を実現するFastCGIが考案されたので、その問題もほぼ解消しています。
Nginx・php-fpmの設定
今回はNginxをWebサーバーに使います。
ちなみに、「php-fpm」のFPMは「 FastCGI Process Manager」の略です。
ドキュメントルート・ポートなどを決める
WSL2で使う目的は「開発環境」なので、 $HOMEi以下でHTMLやPHPを編集してデプロイ無しですぐ実行できないと不便です。
($HOMEの部分は自分の環境に読み替えてください)
Nginxの使うポートをデフォルトの「80」とかにすると、他(Windowsにも他の言語とかはいっているので)とバッティングする可能性があるので避けることにします。
ということで。
今回は以下のようにします。
- ドキュメントルート: $HOME/www/htdocs
- アドレス:localhost
- ポート:8099
あと、準備として「PHP8.1」のパスも調べておきます。
which php8.1
結果は「/usr/bin/php8.1」でした。
設定ファイルの場所を確認
設定ファイルの場所を確認しておきます。
僕の環境(WSL2:Ubuntu20.04LTS)ではPHPの設定ファイルは以下でした。
/etc/php/8.1/fpm
同様に、Nginxの設定ファイルは以下でした。
/etc/nginx
php-fpmの設定
動かすだけなら、設定ファイルの修正はいりません。
なので、Nginxの設定時に必要な情報を確認するだけです。
僕の環境だと「/etc/php/8.1/fpm/php-fpm.conf」の最後の方に以下の記述があります。
include=/etc/php/8.1/fpm/pool.d/*.conf
設定を「pool.d」以下の拡張子「conf」ファイルから読み込んでいます。
その情報をもとに「pool.d」以下を見ると、www.confがありました。
「/etc/php/8.1/fpm/pool.d/www.conf」の中を見ます。
真ん中あたりに「Listen」の記載があります。
listen = /run/php/php8.1-fpm.sock
この「/run/php/php8.1-fpm.sock」がnginxの設定で必要になる情報です。
確認したら、php-fpmのサービスをスタートします。
sudo service php8.1-fpm start
ちゃんと動いていれば、ここで上記の「php8.1-fpm.sock」が生成されます。
nginxの設定
nginx.confにきちんと記述すべきと思いつつ、今回は手抜きで以下のファイルに記載されているデフォルトを直接修正することにします。
/etc/nginx/sites-enabled/default
変更点だけ書きます。
まず、ポートです。
listen 8099 default_server;
listen [::]:8099 default_server;
としてポートをデフォルトの「80」から変更しました。
ドキュメントルートも
root /home/boku/www/htdocs;
としてデフォルト「/var/www/html」から変更しました。
そして、以下の部分がコメントになっているのをはずして、fastcgi_passの赤字の部分を先ほど確認したlistenのパス「/run/php/php8.1-fpm.sock」に書き換えます。
location ~ \.php$ {
include snippets/fastcgi-php.conf;# With php-fpm (or other unix sockets):
#fastcgi_pass unix:/run/php/php8.1-fpm.sock;
# With php-cgi (or other tcp sockets):
fastcgi_pass 127.0.0.1:9000;
}
これで上書き保存します。
設定のテストをします。
sudo nginx -t
大丈夫ですね。
ここまでできたら、Nginxをスタート、すでに動いている場合はリスタートします。
sudo service nginx start
すでに動いていた場合は
sudo service nginx restart
でもいいです。
上記の手順通りで大丈夫なのですが、うまくいかない場合もありえます。
その対処方法については、Qiitaのほうに書いているので、そちらのリンクをはっておきます。
上記記事にもちらっと書いているのですが、少し補足します。
実は、WSL2ではないUbuntuを対象にした記事だと、以下のように修正すべき書いてあることがよくあります。
user = nginx
group = nginxlisten.owner = nginx
listen.group = nginx
listen.mode = 0660
これはWSL2のUbuntuだとうまくいきません。
WSL2では以下のようになっているデフォルトを変更してはいけないです。
user = www-data
group = www-datalisten.owner = www-data
listen.group = www-data
;listen.mode = 0660
理由は、php-fpmをインストールしたときに、/etc/phpフォルダが、www-dataユーザで作成されるからです。
なので、それ以外の権限だと「php8.1-fpm.sock」がうまく作成されません。
簡単なphpソースを書いて動作確認
ドキュメントルートを変えてしまっているので、urlにアクセスしてもおなじみのWelcome画面はでません。
動作確認のため、適当なHTMLとPHPを作って表示テストをします。
まずは「index.html」
OKです。
次に「info.php」
実行します。
大丈夫そうです。
ではでは。