Nginxで最新バージョンのPHP(php-fpm)を動かす【Ubuntu】

Nginxで最新バージョンのPHP(php-fpm)を動かす【Ubuntu】 サーバー

PHPと言えば、Apacheとのコンビですよね。
でも、今後はそのコンビを見れなくなるかもしれません。

なぜなら、時代はLAMPではなくLEMPだからです。
「A」のApacheが、「E」のNginxに変わっています。

これも時代の流れなのでしょうね。
そういう私は、LAMP色にかなり染まっています。

しかし、今後のためにLAMPからLEMPに移行中です。
今後もWebシステムを開発し続けたいですからね。

今回は、その移行の一環です。
NginxでPHPを動かすことがミッションとなります。

本記事の内容

  • Nginxで最新バージョンのPHPを動かす環境
  • Ubuntu 18.04
  • Nginx 1.14.0 
  • PHP 7.4(インストール)
  • NginxでPHPを動かすための設定

それでは、上記に沿って解説を行っていきます。

Nginxで最新バージョンのPHPを動かす環境

今回は、LEMP環境の構築までは行いません。
あくまで、NginxでPHPを動かすことが目的です。

LEMPのうちのLEPの部分です。
「P」はPHPではなく、Pythonでもオカシイことはありません。

ただ、まだまだPHPは頑張るみたいです。
Webシステムのサーバーサイドにおいては、まだまだ活躍すると思います。
個人的にも、PHPには長生きして欲しいです。

では、話を環境に戻しましょう。
LEPを構成するのは、以下となります。

  • Ubuntu 18.04
  • Nginx 1.14.0 
  • PHP 7.4

以下で説明していきます。

Ubuntu 18.04

「L」のLinuxは、Ubuntuです。
UbuntuもかなりLinuxの中でも主要な位置を占めるようになりました。

Q-Success社の調査結果より(2020年9月5日時点)
https://w3techs.com/technologies/details/os-linux

これは、Linuxのディストリビューション毎のシェアです。
もう、ここまでUbuntuの支配が進んでいます。

私は、主にDebian使いでした。
今後は、DebianとUbuntuの二刀流で行くつもりです。
Ubuntuの比率を上げていくことにはなるでしょう。

そのUbuntuですが、最低限必要な設定は以下をご覧ください。

なお、バージョンを確認するには以下のコマンドを実行します。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic

Nginx 1.14.0 

Nginxは、私がLAMPだけの世界から抜け出すようになったキッカケです。
それは、以下の記事で解説しています。

一言で表すと、「Apacheはオワコン」ということです。
今後は、Nginxがシェアを伸ばし続けるでしょう。

もちろん、新たなWebサーバーが出てくる可能性もありますけどね。
いづれにせよ、Apacheは衰退していくでしょう。

そして、このNginxのインストールに関しては次の記事を参考にしてください。
マルチドメイン対応の説明まで行っています。

また、Nginxのバージョンの確認は以下で可能です。

$ nginx -V
nginx version: nginx/1.14.0 (Ubuntu)

PHP 7.4(インストール)

本記事のメインですね。

上記で長々とUbuntuやNginxについて説明してきました。
でも、これには理由があります。

Linuxでの作業は、ディストリビューションやバージョンによって大きく異なります。
その誤解をなくすために、長々と説明したというわけです。

では、PHPをUbuntuにインストールしていきます。
が、その前にインストール状況を確認します。

$ php -v
-bash: php: コマンドが見つかりません

まだ、PHPがインストールされていないことを確認できました。

さて、ここからインストール作業の開始です。
ただ、そのまま普通にインストールはしません。

Ubuntu 18.04がデフォルトで対応しているのは、PHP 7.2になります。
そして、PHP 7.4が2020年9月6日時点で最新バージョンです。

この最新バージョンをUbuntu 18.04にインストールするには、ondrej/phpレポジトリを追加する必要があります。
実際のコマンドは以下。

$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php

追加が完了したら、パッケージ一覧を更新しておきましょう。
そして、バージョンを指定してインストールします。

$ sudo apt update
$ sudo apt install php7.4

インストールが完了したら、以下のコマンドで確認です。

$ php -v                                                                                                                                
PHP 7.4.9 (cli) (built: Aug  7 2020 14:29:36) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies

OKですね。
ただし、これだけではNginxでPHPを動かすことはできません。

PHPのインストール最中に、次のような表示が出てきたかもしれません。

apache2_invoke: Enable module php7.4
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
invoke-rc.d: initscript apache2, action "restart" failed.
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Sun 2020-09-06 10:31:03 JST; 18ms ago
  Process: 14593 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)


9月 06 10:31:03 myindigo systemd[1]: Starting The Apache HTTP Server...
9月 06 10:31:03 myindigo apachectl[14593]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
9月 06 10:31:03 myindigo apachectl[14593]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
9月 06 10:31:03 myindigo apachectl[14593]: no listening sockets available, shutting down
9月 06 10:31:03 myindigo apachectl[14593]: AH00015: Unable to open logs
9月 06 10:31:03 myindigo apachectl[14593]: Action 'start' failed.
9月 06 10:31:03 myindigo apachectl[14593]: The Apache error log may have more information.
9月 06 10:31:03 myindigo systemd[1]: apache2.service: Control process exited, code=exited status=1
9月 06 10:31:03 myindigo systemd[1]: apache2.service: Failed with result 'exit-code'.
9月 06 10:31:03 myindigo systemd[1]: Failed to start The Apache HTTP Server.

「failed」や「Failed」とか物騒ですね。
これは、Apacheがインストールされていない場合に出てきます。

ここでも、PHPとApacheの密接な関係をうかがい知れますね。
このエラーが物語るように、PHPはApache前提で動くようにされています。
もっと言うと、Apacheの内部に組み込まれて動くのです。

また、PHPはNginxで動くことは前提とされていません。
そのため、NginxでPHPを動かすために一工夫が必要となります。

その一工夫の第一ステップが、php-fpmのインストールです。
以下のコマンドでインストール可能。

$ sudo apt install php-fpm

インストール後には確認。

$ php-fpm7.4 -v                                                                                                                         
PHP 7.4.9 (fpm-fcgi) (built: Aug  7 2020 14:29:36)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies

OKです。

php-fpmを簡単に説明すると、Webサーバーから呼ばれて動く仕組みとなります。
そのため、呼ばれればどのWebサーバーでもPHPが実行可能です。

fpmの有無実行可能Webサーバー
なしのPHPApacheのみ
ありのPHPApache・Nginx・IIS

とりあえず、上記の表の内容を覚えていれば大きく間違うことはありません。

NginxでPHPを動かすための設定

とりあえず、PHPを動かすだけなら1つの設定ファイルを触るだけでOKです。

まずは、設定の修正を行う前に情報収集です。
次のファイルの「listen」を確認します。

/etc/php/7.4/fpm/pool.d/www.conf

listen = /run/php/php7.4-fpm.sock

このパスのファイルを通じて、NginxとPHP(php-fpm)がやり取り可能です。
そのため、このパスをNginx側の設定ファイルに教えてやる必要があります。

その作業を行います。

$ sudo vi /etc/nginx/sites-enabled/default

/etc/nginx/sites-enabled/default

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

56行目付近から、上記のようにコメントを外します。
そして、先ほど調べたパスをfastcgi_passに設定。
これでNginxは、PHP(php-fpm)とやり取りが可能になります。

では、この設定を反映させます。

$ sudo systemctl reload nginx

確認しましょう。
そのためには、defaultのドキュメントルート(初期では/var/www/html)にinfo.phpを設置します。

info.php

<?php phpinfo(); ?>

info.phpを設置したら、アクセスします。
http://○.○.○.○[サーバーIP]/info.phpへアクセス。

この見慣れた画面が出てくれば、成功です。
これで、あなたも立派なLEMP族です。

タイトルとURLをコピーしました