著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Apache Webサーバーは、仮想ホストを使用して、単一のインスタンスで複数のドメインを管理します。 同様に、 PHP-FPM はデーモンを使用して、単一のインスタンスで複数のPHPバージョンを管理します。 一緒に、ApacheとPHP-FPMを使用して、それぞれが異なるバージョンのPHPを使用し、すべて同じサーバー上で同時に複数のPHPWebアプリケーションをホストできます。 これは、アプリケーションごとに異なるバージョンのPHPが必要になる場合があるため便利ですが、定期的に構成されたLAMPスタックなどの一部のサーバースタックは1つしか管理できません。 ApacheとPHP-FPMを組み合わせることも、各アプリケーションを独自のインスタンスでホストするよりもコスト効率の高いソリューションです。

PHP-FPMは、次の構成オプションも提供します。 stderrstdout ロギング、緊急再起動、および適応プロセスの生成。これは、負荷の高いサイトに役立ちます。 実際、ApacheをPHP-FPMで使用することは、特にパフォーマンスに関しては、PHPアプリケーションをホストするための最良のスタックの1つです。

このチュートリアルでは、1つのインスタンスに2つのPHPサイトを設定します。 各サイトは独自のドメインを使用し、各ドメインは独自のバージョンのPHPをデプロイします。 最初、 site1.your_domain、PHP7.3をデプロイします。 二番目、 site2.your_domain、PHP7.4をデプロイします。

前提条件

  • CentOS8を使用した初期サーバーセットアップに従ってセットアップされた少なくとも1GBのRAMを備えた1台のCentOS8サーバー。 sudo 非rootユーザーとファイアウォール。
  • CentOS8にApacheWebサーバーをインストールする方法に従ってセットアップおよび構成されたApacheWebサーバー。
  • CentOS8サーバーを指すように構成されたドメイン名。 共通ドメインレジストラからDigitalOceanネームサーバーをポイントする方法に従って、ドメインをDigitalOceanドロップレットにポイントする方法を学ぶことができます。 このチュートリアルでは、2つのサブドメインを使用します。各サブドメインは、 A DNS設定に記録します。 site1.your_domainsite2.your_domain.

ステップ1—PHP-FPMを使用したPHPバージョン7.3および7.4のインストール

前提条件が完了したら、PHPバージョン7.3と7.4、およびPHP-FPMといくつかの追加の拡張機能をインストールします。 PHPの複数のバージョンをインストールするには、システムにRemiリポジトリをインストールして有効にする必要があります。 これは、CentOS8システム上のPHPスタックの最新バージョンも提供します。

以下のコマンドを使用して、両方のリポジトリをシステムに追加できます。

  1. sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

上記のコマンドは、EPELリポジトリも有効にします。

まず、Remiで利用できるPHP7のバージョンを確認しましょう。

  1. sudo dnf module list php

次のような出力が表示されます。

Output
Remi's Modular repository for Enterprise Linux 8 - x86_64 Name Stream Profiles Summary php remi-7.2 common [d], devel, minimal PHP scripting language php remi-7.3 common [d], devel, minimal PHP scripting language php remi-7.4 common [d], devel, minimal PHP scripting language

次に、デフォルトのPHPモジュールを無効にし、次のコマンドを使用してRemiのPHP7.3モジュールを有効にします。

  1. sudo dnf module reset php
  2. sudo dnf module enable php:remi-7.3

インストールを始めましょう php73php73-php-fpm:

  1. sudo dnf install php73 php73-php-fpm -y
  • php73 PHPアプリケーションを実行するために使用できるメタパッケージです。
  • php73-php-fpm デーモンとして実行され、Fast/CGI要求を受信するFastProcessManagerインタープリターを提供します。

ここで、PHPバージョン7.4のプロセスを繰り返します。 インストール php74php74-php-fpm.

  1. sudo dnf module reset php
  2. sudo dnf module enable php:remi-7.4
  3. sudo dnf install php74 php74-php-fpm -y

両方のPHPバージョンをインストールした後、 php73-php-fpm 次のコマンドを使用して、サービスを起動し、起動時に開始できるようにします。

  1. sudo systemctl start php73-php-fpm
  2. sudo systemctl enable php73-php-fpm

次に、のステータスを確認します php73-php-fpm 次のコマンドでサービスを実行します。

  1. sudo systemctl status php73-php-fpm

次の出力が表示されます。

  1. ● php73-php-fpm.service - The PHP FastCGI Process Manager
  2. Loaded: loaded (/usr/lib/systemd/system/php73-php-fpm.service; enabled; vendor preset: disabled)
  3. Active: active (running) since Wed 2020-04-22 05:14:46 UTC; 52s ago
  4. Main PID: 14206 (php-fpm)
  5. Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
  6. Tasks: 6 (limit: 5059)
  7. Memory: 25.9M
  8. CGroup: /system.slice/php73-php-fpm.service
  9. ├─14206 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
  10. ├─14207 php-fpm: pool www
  11. ├─14208 php-fpm: pool www
  12. ├─14209 php-fpm: pool www
  13. ├─14210 php-fpm: pool www
  14. └─14211 php-fpm: pool www
  15. Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
  16. Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.

このプロセスを繰り返して、今すぐ開始します php74-php-fpm 次のコマンドを使用して、サービスを起動し、起動時に開始できるようにします。

  1. sudo systemctl start php74-php-fpm
  2. sudo systemctl enable php74-php-fpm

そして、のステータスを確認します php74-php-fpm 次のコマンドでサービスを実行します。

  1. sudo systemctl status php74-php-fpm

次の出力が表示されます。

  1. ● php74-php-fpm.service - The PHP FastCGI Process Manager
  2. Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
  3. Active: active (running) since Wed 2020-04-22 05:16:16 UTC; 23s ago
  4. Main PID: 14244 (php-fpm)
  5. Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
  6. Tasks: 6 (limit: 5059)
  7. Memory: 18.8M
  8. CGroup: /system.slice/php74-php-fpm.service
  9. ├─14244 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
  10. ├─14245 php-fpm: pool www
  11. ├─14246 php-fpm: pool www
  12. ├─14247 php-fpm: pool www
  13. ├─14248 php-fpm: pool www
  14. └─14249 php-fpm: pool www
  15. Apr 22 05:16:15 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
  16. Apr 22 05:16:16 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.

この時点で、サーバーに2つのPHPバージョンがインストールされています。 次に、展開するWebサイトごとにディレクトリ構造を作成します。

ステップ2—両方のWebサイトのディレクトリ構造を作成する

このセクションでは、2つのWebサイトそれぞれのドキュメントルートディレクトリとインデックスページを作成します。

まず、site1.your_domainsite2.your_domainの両方のドキュメントルートディレクトリを作成します。

  1. sudo mkdir /var/www/site1.your_domain
  2. sudo mkdir /var/www/site2.your_domain

デフォルトでは、ApacheWebサーバーはapacheユーザーおよびapacheグループとして実行されます。 Webサイトのルートディレクトリの正しい所有権と権限を持っていることを確認するには、次のコマンドを実行します。

  1. sudo chown -R apache:apache /var/www/site1.your_domain
  2. sudo chown -R apache:apache /var/www/site2.your_domain
  3. sudo chmod -R 755 /var/www/site1.your_domain
  4. sudo chmod -R 755 /var/www/site2.your_domain

The chown コマンドは、2つのWebサイトディレクトリの所有権をに変更します apache ユーザーと apache グループ。 The chmod コマンドは、そのユーザーとグループ、およびその他に関連付けられている権限を変更します。

次に、を作成します info.php 各Webサイトのルートディレクトリ内のファイル。 これにより、各WebサイトのPHPバージョン情報が表示されます。 site1で始まります。

  1. sudo vi /var/www/site1.your_domain/info.php

次の行を追加します。

/var/www/<^>site1.your_domain <^> / info.php
<?php phpinfo(); ?>

ファイルを保存して閉じます。 次に、作成したinfo.phpファイルをsite2にコピーします。

  1. sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

これで、Webサーバーに、各サイトが訪問者にデータを提供するために必要なドキュメントルートディレクトリができました。 次に、2つの異なるPHPバージョンで動作するようにApacheWebサーバーを構成します。

ステップ3—両方のWebサイト用にApacheを構成する

このセクションでは、2つの仮想ホスト構成ファイルを作成します。 これにより、2つのWebサイトが2つの異なるPHPバージョンで同時に動作できるようになります。

Apacheがこのコンテンツを提供するには、正しいディレクティブを使用して仮想ホストファイルを作成する必要があります。 ディレクトリ内に2つの新しい仮想ホスト構成ファイルを作成します /etc/httpd/conf.d/.

まず、Webサイトsite1.your_domainの新しい仮想ホスト構成ファイルを作成します。 ここでは、Apacheに次を使用してコンテンツをレンダリングするように指示します php7.3:

  1. sudo vi /etc/httpd/conf.d/site1.your_domain.conf

次のコンテンツを追加します。 Webサイトのディレクトリパス、サーバー名、およびPHPのバージョンが設定と一致していることを確認してください。

/etc/httpd/conf.d/site1.your_domain.conf
<VirtualHost *:80>
     ServerAdmin [email protected]site1.your_domain
     ServerName site1.your_domain
     DocumentRoot /var/www/site1.your_domain
     DirectoryIndex info.php
     ErrorLog /var/log/httpd/site1.your_domain-error.log
     CustomLog /var/log/httpd/site1.your_domain-access.log combined

  <IfModule !mod_php7.c>
    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/var/opt/remi/php73/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>

</VirtualHost>

為に DocumentRoot Webサイトのルートディレクトリのパスを指定しています。 為に ServerAdmin あなたはそのメールを追加しています your_domain サイト管理者がアクセスできます。 為に ServerName 最初のサブドメインのURLを追加します。 SetHandler の場合、php7.3用のPHP-FPMソケットファイルを指定しています。

ファイルを保存して閉じます。

次に、Webサイトsite2.your_domainの新しい仮想ホスト構成ファイルを作成します。 デプロイするこのサブドメインを指定します php7.4:

  1. sudo vi /etc/httpd/conf.d/site2.your_domain.conf

次のコンテンツを追加します。 繰り返しになりますが、Webサイトのディレクトリパス、サーバー名、およびPHPのバージョンが一意の情報と一致していることを確認してください。

/etc/httpd/conf.d/site2.your_domain.conf
<VirtualHost *:80>
     ServerAdmin [email protected]site2.your_domain
     ServerName site2.your_domain
     DocumentRoot /var/www/site2.your_domain
     DirectoryIndex info.php
     ErrorLog /var/log/httpd/site2.your_domain-error.log
     CustomLog /var/log/httpd/site2.your_domain-access.log combined
  <IfModule !mod_php7.c>
    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>

</VirtualHost>

終了したら、ファイルを保存して閉じます。 次に、次のコマンドを使用して、Apache構成ファイルに構文エラーがないか確認します。

  1. sudo apachectl configtest

出力印刷が表示されます Syntax OK:

  1. Output
    Syntax OK

最後に、Apacheサービスを再起動して、変更を実装します。

  1. sudo systemctl restart httpd

各サイトにサービスを提供するようにApacheを構成したので、それらをテストして、適切なPHPバージョンが実行されていることを確認します。

ステップ4—両方のWebサイトをテストする

この時点で、2つの異なるバージョンのPHPを実行するように2つのWebサイトを構成しました。 次に、結果をテストします。

Webブラウザーを開き、両方のサイトにアクセスします http://site1.your_domainhttp://site2.your_domain. 次のような2つのページが表示されます。

タイトルに注意してください。 最初のページは、site1.your_domainがPHPバージョン7.3をデプロイしたことを示しています。 2つ目は、site2.your_domainがPHPバージョン7.4をデプロイしたことを示しています。

サイトをテストしたので、 info.php ファイル。 これらにはサーバーに関する機密情報が含まれており、権限のないユーザーがアクセスできるため、セキュリティの脆弱性があります。 両方のファイルを削除するには、次のコマンドを実行します。

  1. sudo rm -rf /var/www/site1.your_domain/info.php
  2. sudo rm -rf /var/www/site2.your_domain/info.php

これで、2つの異なるPHPバージョンを持つ2つのWebサイトを処理する単一のCentOS8サーバーができました。 ただし、PHP-FPMはこの1つのアプリケーションに限定されません。

結論

これで、仮想ホストとPHP-FPMを組み合わせて、単一のサーバーで複数のWebサイトと複数のバージョンのPHPを提供できるようになりました。 Apacheサービスが処理できるPHPサイトとPHPバージョンの数に対する実際的な制限は、インスタンスの処理能力だけです。

ここから、アダプティブスポーンプロセスやログ記録方法など、PHP-FPMのより高度な機能の調査を検討できます。 sdtoutstderr. または、Let’sEncryptの無料のTLS/SSL証明書を使用してWebサイトを保護することもできます。