IT二刀流にはプロモーションが含まれています。

php-fpmとnginxのインストールと設定

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}

nginx welcome page

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 phpinfo

まとめ

nginxとphp-fpmのインストールと設定をしてphpページを表示させる環境を構築しました。

Apacheとphp-fpmでphpページを表示させることが多いようですが、最近はnginxも増えてきていると思います。

まぁ、自分でサーバ環境を用意する機会は多くないかもですが。

ITエンジニアの転職

いまITエンジニアの需要は急拡大しています。
ITエンジニアの経験があれば好条件で転職することも難しくありません。

マイナビクリエイター

☆ 支援ご協力のお願い ☆

この記事が「役に立った」と感じたら

投げ銭の「OFUSEで応援」で支援して頂けたら励みになります!

OFUSEのやり方(説明)

関連記事
記事特集