FastCGIでPHPを動作させるPHP-FPMをnginxで動作させるための方法です。
nginx、php、php-fpmのインストールから設定までをおこないます。
各バージョン
- CentOS 7.9
- nginx 1.22.0
- php 8.1.7
- php-fpm 8.1.7
nginxのインストール
repoを追加
インストールのためnginxのリポジトリを追加します。
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
nginxのインストール
nginxのインストールを行います。
# yum install -y nginx
nginxの起動
nginxを起動します。
# systemctl start nginx
起動の確認(active)
# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since 水 2022-06-22 09:43:50 JST; 4s ago
Docs: http://nginx.org/en/docs/
firewalldの許可設定
ファイヤーウォールでhttpの80ポートを許可します。(firewallを無効にしていたら不要)
# firewall-cmd --permanent --zone public --add-service http
ファイアウォールの反映
# firewall-cmd --reload
web画面の確認
サーバのURLにアクセスしてwelcomeページが表示されればOK
http://{サーバIP}
PHPのインストール
今回は、RemiリポジトリからPHP8.1をインストールします。
Remiリポジトリをインストール
CentOS8は標準がPHP5なのでRemiリポジトリをインストールします。
# yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
opensslをインストール(SSL不要ならやらない)
SSLにする予定がないなら不要です。
# yum install -y openssl openssl-devel
PHPと拡張モジュールのインストール
拡張モジュールは必要なやつを入れてください。
wordpressを構築予定ならphp81-php-mysqlndやphp81-php-pecl-imagick-im6が必要かもです。
# yum install -y php81 php81-php php81-php-pdo php81-php-mbstring php81-php-pecl-crypto php81-php-xml php81-php-pecl-zip
シンボリックリンク作成
phpでコマンドを認識させるためにシンボリックリンクを作成
# ln -sf /usr/bin/php81 /usr/bin/php
PHPのバージョン確認
php -vでバージョンが表示されれば、phpのインストールは完了です。
# php -v
PHP 8.1.7 (cli) (built: Jun 7 2022 18:21:38) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.7, Copyright (c) Zend Technologies
PHP-FPMのインストール
NginxとPHPをつなげるPHP-FPMのインストールと設定をします。
php-fpmインストール
php-fpmをyumでインストールします。
# yum install -y php81-php-fpm
php-fpm設定ファイルを編集
今回はUNIXドメインソケットを使ってnginxとのやり取りをします。
変更した個所だけ記載しています、それ以外はデフォルトで。
# vi /etc/opt/remi/php81/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
pm = static
pm.max_children = 2
「pm = static」と「pm.max_children = 2」の設定は、常に子プロセスを2つ起動するって意味です。
この辺のチューニングはサーバや運用サイトごとに調整が必要になります。
php-fpmの起動
ソケットの配置ディレクトリを作成
# mkdir /var/run/php-fpm
/var/runの下って再起動とかすると消える(元に戻る)んですよね。SELinuxが原因みたいですが。
サーバ再起動後に「php-fpm.sockがない」とエラーが出て、php-fpmが起動しなければ確認してください。
systemctlで起動します。
# systemctl start php81-php-fpm
php-fpmのソケットがnginx:nginxになっていることを確認
# ll /var/run/php-fpm/
合計 0
srw-rw----. 1 nginx nginx 0 6月 22 10:29 php-fpm.sock
PHPページの作成
テスト用のページを作成、おなじみのphpinfo。
/var/wwwの下にnginxのディレクトリは無ければ作成してください。
# echo "<?php phpinfo() ?>" > /var/www/nginx/index.php
Nginxの設定ファイル変更
nginxの設定変更
PHPのページが表示できるようにNginxの設定ファイルを変更します。
# vi /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
root /var/www/nginx;
location / {
root /var/www/nginx;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
serverディレクティブの直下のrootは結構重要です、これが無いとdocument_rootは参照できません。
fastcgi_passはUNIXソケットのパスを指定します。
fastcgi_paramも結構ハマるポイント、デフォルトの記載だと/scriptsみたいなフォルダを参照します。
構成にもよりますが、$document_rootに書き換えると幸運になれます。
nginxの再起動
設定を反映させるためにnginxを再起動
# systemctl restart nginx
PHPページの確認
サーバのURLのアクセスしてPHPのページが表示されればOK
http://{サーバIP}/index.php
まとめ
nginxとphp-fpmのインストールと設定をしてphpページを表示させる環境を構築しました。
Apacheとphp-fpmでphpページを表示させることが多いようですが、最近はnginxも増えてきていると思います。
まぁ、自分でサーバ環境を用意する機会は多くないかもですが。