【CentOS stream 9】Nginxでphp、phpMyAdminを使う

2022年6月9日

CentOS stream 9にNginxとMariaDB、PHPをインストールした後、phpMyAdminを使えるようにします。

VPSはConoHa VPSを使用しています。

関連記事 Nginx系インストール
1.ConoHa VPS のSSHセキュリティを強化する
2.【CentOS stream 9】 Nginxをインストールする
3.【CentOS stream 9】 Maria DBをインストールする
4.【CentOS stream 9】 phpをインストールする
5.【CentOS stream 9】 Nginxでphp、phpMyAdminを使う
6.【CentOS stream 9】 composerをインストールする
7.【CentOS stream 9】 Nginxに let's encrypt SSL証明書インストール
関連記事 ドメイン
ConoHa WING VPS に サブドメインを追加する

Nginxでphpを使うための手順

【CentOS stream 9】 phpをインストールするの続きです。

Nginxでphpを使えるようにするために、まずは

「php-fpm.d/www.conf」ファイルを編集します。

# vi /etc/php-fpm.d/www.conf

24行目と26行目をapacheからnginxに変更します。

; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

変更後

; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

phpセッションの保存先を変更する

phpのアップデートがあると、「/var/lib/php/session」のグループがnginxからapacheに変わってしまいPHPセッションが効かなくなるため、phpセッションの保存先を変更します。

参考サイト:phpのアップデートがあるたびに/var/lib/php/sessionのパーミッションを変更してたけどめんどくさいので恒久対策をした – 絶望の麺ジニア

# vi /etc/php-fpm.d/www.conf

436行目あたりを変更します。

php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
;php_value[opcache.file_cache]  = /var/lib/php/opcache

↓変更後

php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session
php_value[session.save_path]    = /var/lib/php/nginx_session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
;php_value[opcache.file_cache]  = /var/lib/php/opcache

新しいセッションの保存先を作成

# mkdir /var/lib/php/nginx_session

グループ変更

# chown root:nginx /var/lib/php/nginx_session/

パーミッション変更

# chmod 770 /var/lib/php/nginx_session/

変更後の確認

# ls -la /var/lib/php/
total 28
drwxr-xr-x   7 root root   4096 Jun  2 01:37 .
drwxr-xr-x. 38 root root   4096 Jun  2 00:46 ..
drwxrwx---   2 root nginx  4096 Jun  2 01:37 nginx_session
drwxrwx---   2 root apache 4096 Dec 22 21:53 opcache
drwxr-xr-x   2 root root   4096 Dec 22 21:53 peclxml
drwxrwx---   2 root apache 4096 Dec 22 21:53 session //こちらは使わない
drwxrwx---   2 root apache 4096 Dec 22 21:53 wsdlcache

php-fpm再起動

# systemctl restart php-fpm

php-fpmサービスの状態確認

# systemctl status php-fpm
 php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
     Active: active (running) since Thu 2022-05-26 04:33:56 JST; 13min ago
   Main PID: 157189 (php-fpm)
     Status: "Processes active: 0, idle: 6, Requests: 13, slow: 0, Traffic: 0req/sec"
      Tasks: 7 (limit: 2702)
     Memory: 47.4M
        CPU: 857ms
     CGroup: /system.slice/php-fpm.service
             ├─157189 "php-fpm: master process (/etc/php-fpm.conf)"
             ├─157190 "php-fpm: pool www"
             ├─157191 "php-fpm: pool www"
             ├─157192 "php-fpm: pool www"
             ├─157193 "php-fpm: pool www"
             ├─157194 "php-fpm: pool www"
             └─157227 "php-fpm: pool www"

May 26 04:33:56   systemd[1]: Starting The PHP FastCGI Process Manager...
May 26 04:33:56   systemd[1]: Started The PHP FastCGI Process Manager.

php-fpmの自動化

# systemctl enable php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.

nginxの再起動

# systemctl restart nginx

phpファイルの作成

# touch /usr/share/nginx/html/info.php

phpファイルを編集

# vi /usr/share/nginx/html/info.php

「i」を押してインサートモードへ、

<?php
 session_start();
 phpinfo();
?>
nginx php
session_start(); phpinfo();と入力して保存する

このように記述して、「:wq」を入力、エンター押下で保存して終了

ブラウザのアドレスバーに「http://160.251.100.96(VPSのIPアドレス)/info.php」と入力してアクセス

phpinfoの画面が表示されるか確認
phpinfoの画面が表示されるか確認

セッションが作られているか確認

# ll /var/lib/php/nginx_session/
total 0
-rw------- 1 nginx nginx 0 Jun  2 01:46 sess_tj0a1ureo3alvunnop1fbvbjqk

セッションが作られていないことを確認

# ll /var/lib/php/session/
total 0

もしあれば、古いセッション削除

# rm -rf /var/lib/php/session/*

phpでディレクトリを作りたい

下記のようなphpファイルにブラウザアクセスして、ディレクトリを作りたい時、

<?php
  $new_dir = './testdir';
  mkdir($new_dir);
?>

こんなエラーログが出てディレクトリが作れないときは

2022/05/28 01:29:33 [error] 157632#157632: *1567 FastCGI sent in stderr: "PHP message: PHP Warning:  mkdir(): Permission denied in /usr/share/nginx/html/dircopytest.php on line 3" while reading response header from upstream, client: 210.2XX.XX.XXX, server: _, request: "GET /dircopytest.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "160.251.XXX.XXX"

nginxのドキュメントルートの所有者をnginxにすることで解決します。

# chown -R nginx:nginx /usr/share/nginx/html/
# ls -la /usr/share/nginx/ 
total 20
drwxr-xr-x    5 root  root  4096 May 27 04:29 .
drwxr-xr-x. 108 root  root  4096 May 26 04:17 ..
drwxr-xr-x   13 nginx nginx 4096 May 28 01:43 html
drwxr-xr-x    3 root  root  4096 May 27 04:24 __MACOSX
drwxr-xr-x    2 root  root  4096 Feb  3 05:10 modules

NginxでphpMyAdminを使うための手順

phpMyAdminのインストールから行います。

dnf installコマンドでphpMyAdminをインストールします。

php8.1をremiからインストールしている場合は「dnf –enablerepo=remi install phpMyAdmin」コマンドでインストールします。

# dnf install phpMyAdmin
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 0:13:49 ago on Thu 02 Jun 2022 03:10:16 AM JST.
Dependencies resolved.
================================================================================================================
 Package                     Architecture          Version                       Repository                Size
================================================================================================================
Installing:
 phpMyAdmin                  noarch                5.2.0-1.el9                   epel                     7.5 M
Installing dependencies:
 gd                          x86_64                2.3.2-3.el9                   appstream                132 k
 jbigkit-libs                x86_64                2.1-23.el9                    appstream                 53 k
 libXpm                      x86_64                3.5.13-7.el9                  appstream                 59 k
 libtiff                     x86_64                4.2.0-3.el9                   appstream                194 k
 libwebp                     x86_64                1.2.0-3.el9                   appstream                278 k
 libzip                      x86_64                1.7.3-7.el9                   appstream                 64 k
 php-gd                      x86_64                8.0.13-1.el9                  appstream                 46 k
 php-intl                    x86_64                8.0.13-1.el9                  appstream                154 k
 php-mysqlnd                 x86_64                8.0.13-1.el9                  appstream                155 k
 php-pecl-zip                x86_64                1.19.2-6.el9                  appstream                 58 k
 php-process                 x86_64                8.0.13-1.el9                  appstream                 48 k

Transaction Summary
================================================================================================================
Install  12 Packages

Total download size: 8.7 M
Installed size: 47 M
Is this ok [y/N]:y

yを入力してエンター

Downloading Packages:
(1/12): jbigkit-libs-2.1-23.el9.x86_64.rpm                                      1.5 MB/s |  53 kB     00:00
(2/12): libXpm-3.5.13-7.el9.x86_64.rpm                                          1.6 MB/s |  59 kB     00:00
(3/12): gd-2.3.2-3.el9.x86_64.rpm                                               2.9 MB/s | 132 kB     00:00
(4/12): libtiff-4.2.0-3.el9.x86_64.rpm                                           13 MB/s | 194 kB     00:00
(5/12): libzip-1.7.3-7.el9.x86_64.rpm                                           7.1 MB/s |  64 kB     00:00
(6/12): libwebp-1.2.0-3.el9.x86_64.rpm                                           12 MB/s | 278 kB     00:00
(7/12): php-gd-8.0.13-1.el9.x86_64.rpm                                          5.0 MB/s |  46 kB     00:00
(8/12): php-intl-8.0.13-1.el9.x86_64.rpm                                         13 MB/s | 154 kB     00:00
(9/12): php-pecl-zip-1.19.2-6.el9.x86_64.rpm                                    8.0 MB/s |  58 kB     00:00
(10/12): php-mysqlnd-8.0.13-1.el9.x86_64.rpm                                     10 MB/s | 155 kB     00:00
(11/12): php-process-8.0.13-1.el9.x86_64.rpm                                    4.6 MB/s |  48 kB     00:00
(12/12): phpMyAdmin-5.2.0-1.el9.noarch.rpm                                       15 MB/s | 7.5 MB     00:00
----------------------------------------------------------------------------------------------------------------
Total                                                                           5.1 MB/s | 8.7 MB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Running scriptlet: phpMyAdmin-5.2.0-1.el9.noarch                                                          1/1
  Preparing        :                                                                                        1/1
  Installing       : libwebp-1.2.0-3.el9.x86_64                                                            1/12
  Installing       : php-process-8.0.13-1.el9.x86_64                                                       2/12
  Installing       : php-mysqlnd-8.0.13-1.el9.x86_64                                                       3/12
  Installing       : php-intl-8.0.13-1.el9.x86_64                                                          4/12
  Installing       : libzip-1.7.3-7.el9.x86_64                                                             5/12
  Installing       : php-pecl-zip-1.19.2-6.el9.x86_64                                                      6/12
  Installing       : libXpm-3.5.13-7.el9.x86_64                                                            7/12
  Installing       : jbigkit-libs-2.1-23.el9.x86_64                                                        8/12
  Installing       : libtiff-4.2.0-3.el9.x86_64                                                            9/12
  Installing       : gd-2.3.2-3.el9.x86_64                                                                10/12
  Installing       : php-gd-8.0.13-1.el9.x86_64                                                           11/12
  Installing       : phpMyAdmin-5.2.0-1.el9.noarch                                                        12/12
  Running scriptlet: phpMyAdmin-5.2.0-1.el9.noarch                                                        12/12
  Verifying        : gd-2.3.2-3.el9.x86_64                                                                 1/12
  Verifying        : jbigkit-libs-2.1-23.el9.x86_64                                                        2/12
  Verifying        : libXpm-3.5.13-7.el9.x86_64                                                            3/12
  Verifying        : libtiff-4.2.0-3.el9.x86_64                                                            4/12
  Verifying        : libwebp-1.2.0-3.el9.x86_64                                                            5/12
  Verifying        : libzip-1.7.3-7.el9.x86_64                                                             6/12
  Verifying        : php-gd-8.0.13-1.el9.x86_64                                                            7/12
  Verifying        : php-intl-8.0.13-1.el9.x86_64                                                          8/12
  Verifying        : php-mysqlnd-8.0.13-1.el9.x86_64                                                       9/12
  Verifying        : php-pecl-zip-1.19.2-6.el9.x86_64                                                     10/12
  Verifying        : php-process-8.0.13-1.el9.x86_64                                                      11/12
  Verifying        : phpMyAdmin-5.2.0-1.el9.noarch                                                        12/12
Installed products updated.

Installed:
  gd-2.3.2-3.el9.x86_64                jbigkit-libs-2.1-23.el9.x86_64      libXpm-3.5.13-7.el9.x86_64
  libtiff-4.2.0-3.el9.x86_64           libwebp-1.2.0-3.el9.x86_64          libzip-1.7.3-7.el9.x86_64
  php-gd-8.0.13-1.el9.x86_64           php-intl-8.0.13-1.el9.x86_64        php-mysqlnd-8.0.13-1.el9.x86_64
  php-pecl-zip-1.19.2-6.el9.x86_64     php-process-8.0.13-1.el9.x86_64     phpMyAdmin-5.2.0-1.el9.noarch

Complete!

「Complete!」と表示されればOK

Nginxの再起動

systemctl restart nginx

phpMyAdminにアクセス

ブラウザのアドレスバーに「http://(VPSのIPアドレス)/phpMyAdmin」と入力してアクセス

http://(VPSのIPアドレス)/phpMyAdmin
http://(VPSのIPアドレス)/phpMyAdmin

phpMyAdminセキュリティ対策

phpMyAdminのアクセスURLをデフォルト「/phpMyAdmin/」から変更してセキュリティを強化します。

「/etc/nginx/default.d/phpMyAdmin.conf」を編集

# vi /etc/nginx/default.d/phpMyAdmin.conf

編集前

location = /phpMyAdmin {
    alias /usr/share/phpMyAdmin/;
}

location /phpMyAdmin/ {
     root /usr/share;
     index index.php index.html;
     location ~ ^/phpMyAdmin/(.+\.php)$
     {
         try_files $uri =404;
         fastcgi_intercept_errors on;
         include        fastcgi_params;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_pass   php-fpm;
     }
}

編集後

location = /phpMyAdmin {
    alias /usr/share/phpMyAdmin/;
}

location /change-here {
     root /usr/share;
     index index.php index.html;
     allow 許可IPアドレス;
#アクセス元のIPアドレスを制限したい場合はこの行も追記する
deny  all;
#アクセス元のIPアドレスを制限したい場合はこの行も追記する
     location ~ ^/change-here/(.+\.php)$
     {
         try_files $uri =404;
         fastcgi_intercept_errors on;
         include        fastcgi_params;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_pass   php-fpm;
     }
}

phpMyAdminのルートディレクトリ名を変更

# mv /usr/share/phpMyAdmin/ /usr/share/change-here/

Nginxのコンフィグ正常性確認

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginxの再起動

# systemctl restart nginx

ブラウザのアドレスバーに「http://(VPSのIPアドレス)/change-here」と入力してアクセス確認する

http://(VPSのIPアドレス)/change-here」
http://(VPSのIPアドレス)/change-here

「change-here」の部分はランダムな英数字記号の組み合わせが良いです。

次やること
6.【CentOS stream 9】 composerをインストールする

参考サイト

NginxでphpMyAdminを使用する [CentOS]

NginxでPHP7(PHP-FPM)を動作させる [CentOS]

簡単に nginx でhttpsを実施する方法 – Opensourcetechブログ

centos stream 9 に nginx と php8.1 をインストール – Qiita

リバースプロキシの設定方法(NginxとApacheでの設定手順)

Let’s Encryptの自動更新でERR_SSL_PROTOCOL_ERROR発生 – Qiita