お金をかけずにサーバーの勉強をしよう

NGINXで PHPを使う

2023年5月4日

メニューへ戻る

NGINXで PHPを使うためのセッティングをします。

Laravelを使いたくなった…という訳ではなく、単にこのサイトがあるさくらインターネットのレンタルサーバーに掲示板を作りたいなと思って何か方便はないかとサービス内容を見た所 PHPだけは使えるので、本番リリース前にテストする環境が欲しかったのです。

PHPでの開発は一切やったことがありませんが、サーバーエンジニアとして環境構築はできるようにしておかないといけないと思うところもありました。

ということで、大したネタではないのですが、NGINXで PHPを動かす所まではやろうかと思います。

環境は以下の通りです。
2023年5月4日時点で、作業の結果、これらのバージョンになりました。

ではサックリと作ってしまいましょう。

Ubuntu Serverのインストールについては、以下に書いている通りに作りました。
Ubuntu Linux Serverをインストール
Ubuntu Serverの初期設定

NGINXのインストールについては「NGiNXサーバーを作る」に書いている通りに作りました。

NGINXが動いているところからのスタートになります。


1.PHPインストール

Ubuntuの snapのリポジトリにはなさそうです。

subro@UbuntuServer2204-2:~$ snap search php
Name               Version       Publisher         Notes    Summary
phpstorm           2023.1.1      jetbrains✓        classic  PhpStorm
nextcloud          25.0.6snap1   nextcloud✓        -        Nextcloud Server - A safe home for all your data
eclipse            2022-12       snapcrafters      classic  Extensible Tool Platform and Java IDE
netbeans           17            apache-netbeans✓  classic  Apache NetBeans IDE
kdevelop           23.04.0       kde✓              classic  Featureful, plugin-extensible IDE for C/C++ and other programming languages
kcachegrind        23.04.0       kde✓              -        Profiler Frontend
imagick            3.7.0RC1      kz6fittycent      -        Imagick is a PHP extension to create and modify images
nodemailerapp      1.0.16        andrisreinman     -        The ultimate email debugging tool
nervatura          5.1.5         nervatura         -        Open Source Business Management Framework
sectrain           9.3           joesecurity       -        A training tool displaying some techniques for secure web app development
laradumps          1.7.0         laradumps         -        LaraDumps
mqttx              1.9.2         emqx              -        MQTT X: An Elegant Cross-platform MQTT 5.0 Desktop Client
vmcloud-nextcloud  1.0.0         victoriususm      -        Nextcloud 16.0.3 Optimized-Boosted
lazfuck            1.2.0         chronoscz         -        A simple BrainFuck IDE written in Lazarus/FPC.
laravel-mhall119   1.3.3         mhall119          classic  Laravel PHP framework
direnv             v2.18.2       nullboxorg        -        direnv -- Unclutter your .profile
graphpath          v1.0          nsg               -        Graphpath generates an ASCII network diagram from the route table
lighttpd-php       0.1           jcverdie          -        lighttpd with php-fpm
eclipse-s-heuer    2020-09snap1  s-heuer           -        Extensible Tool Platform and Java IDE

aptリポジトリにはありましたけど、Ver.8.1のようです。
2023年5月4日時点では、Ver.8.2.5が出ています。

subro@UbuntuServer2204-2:~$ apt search php
〜〜〜 略 〜〜〜
php/jammy 2:8.1+92ubuntu1 all
  server-side, HTML-embedded scripting language (default)
〜〜〜 略 〜〜〜

最新版が欲しかったので本家サイトからダウンロードしようとしたんですが、本家は C言語のソース配布なんですね。
今後のアップデートを鑑みるとちょっと面倒臭くなりそうなのでやめておきます。

一応本家サイトのダウンロードページはこちら。(時間が経つとバージョンは変わります)
Current Stable PHP 8.2.5

一応有名な PPA(Personal Package Archive)リポジトリ(ppa:ondrej/php)もあって、Ubuntuではそれを使う方法を示してくれるブログも多いですが、「業務用の本番環境で PPAじゃね」って人も多かろうと思いますので。


Ubuntuのリポジトリからインストールします。
[php]に加えて、NGINXから利用するため[php-fpm]というのも入れます。

subro@UbuntuServer2204-2:~$ sudo apt install -y php php-fpm
〜〜〜 省略 〜〜〜

インストールできました。

詳細なバージョンを確認してみます。

subro@UbuntuServer2204-2:~$ which php
/usr/bin/php

subro@UbuntuServer2204-2:~$ php -v
PHP 8.1.2-1ubuntu2.11 (cli) (built: Feb 22 2023 22:56:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.11, Copyright (c), by Zend Technologies

最新は 8.1.18の所、コイツは 8.1.2ですので、安定版の 8.1とは言うもののちょっと古いのが悩ましいです。
Ubuntu 22.04だとパッケージはこのバージョンで固定されてしまってる気がします。

なお、php-fpmですが、コイツは常駐プロセスとなっています。

subro@UbuntuServer2204-2:~$ ps -ef | grep php
root       11435       1  0 10:28 ?        00:00:00 php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)
www-data   11436   11435  0 10:28 ?        00:00:00 php-fpm: pool www
www-data   11437   11435  0 10:28 ?        00:00:00 php-fpm: pool www
subro      11540   10104  0 10:31 pts/1    00:00:00 grep --color=auto php

でもって、プロセス間通信用に UNIXドメインソケットも持っています。
シンボリックリンクがありますので、[/run/php/php-fpm.sock]を使いましょう。
(Alternativesの機能で、8.1のやつにリンクされているはず)

subro@UbuntuServer2204-2:~$ ls -l /run/php
合計 4
lrwxrwxrwx 1 root     root     30  5月  4 10:28 php-fpm.sock -> /etc/alternatives/php-fpm.sock
-rw-r--r-- 1 root     root      5  5月  4 10:28 php8.1-fpm.pid
srw-rw---- 1 www-data www-data  0  5月  4 10:28 php8.1-fpm.sock



2.NGINXの設定変更

ここでは [/etc/nginx/sites-available/default]ファイルを書き換えてしまいますが、実際は WEBサイトの構成によってそれぞれのサイトの設定ファイルを作ると思うので、そちらに書いて下さい。

以下の通り変更しました。
ピンクのところが追加です。

[/etc/nginx/sites-available/default]

        index index.html index.htm index.nginx-debian.html;
      ↓
        index index.html index.htm index.php index.nginx-debian.html;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include         snippets/fastcgi-php.conf;
                fastcgi_pass    unix:/run/php/php-fpm.sock;
        }

設定ファイルのフォーマットのテストも通りました。

subro@UbuntuServer2204-2:~$ sudo nginx -T
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
〜〜〜 以下略〜〜〜

NGINXを再起動します。

subro@UbuntuServer2204-2:~$ sudo systemctl restart nginx

再起動しました。


それでは PHPを使った HTMLファイルを作ります。
PHPの最初のテストのいつものアレですね。

[/var/www/html/index.php]

<?php phpinfo(); ?>

WEBブラウザでアクセスします。
我が家の環境では [http://UbuntuServer2204-2/index.php]になります。

出ましたね。いつものが。
PHPの Info画面


==========
PHPを動かせるようになりましたので、目的の掲示板のテストをば。

さくらインターネットのライトプランでは SQLiteという DBも使えるようですが、とりあえずシンプルにファイルのデータベース(?)のやつをどこぞからパクってきました。

うん、動きました。
PHPの掲示板

でもデータのサニタイズもしてないので、これをそのまま使うわけにはいかんな…。
どこかでセキュリティのしっかりしたのを探してこないといけません。

というわけで、この回はおしまい。

よろしければメッセージを残してやって下さい。
掲示板


まぁPHPは本には困らないですね。

PHP本格入門[上] 〜プログラミングとオブジェクト指向の基礎からデータベース連携まで [ 大家正登 ]

価格:3,938円
(2023/5/4 11:49時点)
感想(0件)

独習PHP 第4版 [ 山田 祥寛 ]

価格:3,740円
(2023/5/4 11:50時点)
感想(1件)

いきなりはじめるPHP ワクワク・ドキドキの入門教室 [ 谷藤賢一 ]

価格:1,980円
(2023/5/4 11:50時点)
感想(18件)