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サーバー |
なしのPHP | Apacheのみ |
ありのPHP | Apache・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族です。