序章
Apache Webサーバーは、仮想ホストを使用して、単一のインスタンスで複数のドメインを管理します。 同様に、 PHP-FPM はデーモンを使用して、単一のインスタンスで複数のPHPバージョンを管理します。 一緒に、ApacheとPHP-FPMを使用して、それぞれが異なるバージョンのPHPを使用し、すべて同じサーバー上で同時に複数のPHPWebアプリケーションをホストできます。 これは、アプリケーションごとに異なるバージョンのPHPが必要になる場合があるため便利ですが、定期的に構成されたLAMPスタックなどの一部のサーバースタックは1つしか管理できません。 ApacheとPHP-FPMを組み合わせることも、各アプリケーションを独自のインスタンスでホストするよりもコスト効率の高いソリューションです。
PHP-FPMは、次の構成オプションも提供します。 stderr
と stdout
ロギング、緊急再起動、および適応プロセスの生成。これは、負荷の高いサイトに役立ちます。 実際、ApacheをPHP-FPMで使用することは、特にパフォーマンスに関しては、PHPアプリケーションをホストするための最良のスタックの1つです。
このチュートリアルでは、1つのインスタンスに2つのPHPサイトをセットアップします。 各サイトは独自のドメインを使用し、各ドメインは独自のバージョンのPHPをデプロイします。 最初、 site1.your_domain
、PHP7.0をデプロイします。 二番目、 site2.your_domain
、PHP7.2をデプロイします。
前提条件
- CentOS 7を使用した初期サーバーセットアップに従ってセットアップされた少なくとも1GBのRAMを備えた1台のCentOS7サーバー(sudo非rootユーザーとファイアウォールを含む)。
- CentOS7にApacheWebサーバーをインストールする方法に従ってセットアップおよび構成されたApacheWebサーバー。
- CentOS7サーバーを指すように構成されたドメイン名。 共通ドメインレジストラからDigitalOceanネームサーバーをポイントする方法に従って、ドメインをDigitalOceanドロップレットにポイントする方法を学ぶことができます。 このチュートリアルでは、2つのサブドメインを使用します。各サブドメインは、
A
DNS設定に記録します。site1.your_domain
とsite2.your_domain
.
ステップ1—PHP-FPMを使用したPHPバージョン7.0および7.2のインストール
前提条件が完了したら、PHPバージョン7.0および7.2をインストールします。 SCL(ソフトウェアコレクション)リポジトリは、CentOS7システム用のPHPスタックの多数のバージョンを維持しています。 PHPの最新バージョンが必要で、SCLで利用できない場合は、代わりに remi PPA(パーソナルパッケージアーカイブ)を確認してください。
SCLリポジトリをシステムにインストールすることから始めます。
- sudo yum install centos-release-scl -y
まず、SCLで利用できるPHP7のバージョンを確認しましょう。
- sudo yum list rh-php7[0-9].x86_64
次のような出力が表示されます。
OutputAvailable Packages
rh-php70.x86_64 2.3-1.el7 centos-sclo-rh
rh-php71.x86_64 1-1.el7 centos-sclo-rh
rh-php72.x86_64 1-2.el7 centos-sclo-rh
rh-php73.x86_64 1-1.el7 centos-sclo-rh
最新バージョンのPHP7.3も利用可能であることに注意してください。 ただし、この例では、バージョン7.0および7.2をインストールします。
古いバージョンから始めましょう。 インストール rh-php70
と rh-php70-php-fpm
:
- sudo yum install rh-php70 rh-php70-php-fpm -y
rh-php70
PHPアプリケーションを実行するメタパッケージです。rh-php70-php-fpm
デーモンとして実行され、Fast/CGI要求を受信するFastProcessManagerインタープリターを提供します。
ここで、PHPバージョン7.2のプロセスを繰り返します。 インストール rh-php72
と rh-php72-php-fpm
.
- sudo yum install rh-php72 rh-php72-php-fpm -y
次に、次のコマンドを実行して、両方のソフトウェアコレクションの使用を開始します。
- sudo scl enable rh-php70 bash
- sudo scl enable rh-php72 bash
デフォルトでは、両方のPHPバージョンがポートでリッスンしています 9000
. ただし、このチュートリアルでは、2つのバージョンを同時に実行します。 したがって、2つの新しいポートを指定しましょう。
これを達成するために、あなたは開くことができます /etc/opt/rh/rh-php70/php-fpm.d/www.conf
お気に入りのテキストエディタで、のすべての外観を変更します 9000
に 9002
. 次に、ファイルを保存して閉じ、次のプロセスを繰り返します。 /etc/opt/rh/rh-php72/php-fpm.d/www.conf
、今だけ代用 9000
と 9003
. または、これら2つを使用できます sed
置換を行うためのコマンド:
- sudo sed -i 's/:9000/:9002/' /etc/opt/rh/rh-php70/php-fpm.d/www.conf
- sudo sed -i 's/:9000/:9003/' /etc/opt/rh/rh-php72/php-fpm.d/www.conf
これで、各PHPサービス専用のポートが指定されました。 ただし、これらの変更が機能する前に、SELinux構成にポートを追加する必要があります。
SELinuxはSecurityEnhancedLinuxの略で、CentOS7ではデフォルトで有効になっています。 新しいポートを追加する必要があります 9002
と 9003
SELinuxデータベースに追加し、それらをhttpdサービスに割り当てます。そうしないと、アプリケーションが実行されません。 使用 semanage
このタスクを実行するコマンド:
- sudo semanage port -a -t http_port_t -p tcp 9002
- sudo semanage port -a -t http_port_t -p tcp 9003
The -a
flagは、データベースにオブジェクトを追加することを指定します。 The -t
フラグはオブジェクトのタイプを指定します。この場合は次のようになります。 http_port_t
. そしてその -p
フラグは tcp
プロトコル。 SELinuxと semanage
このチュートリアルのコマンド、または公式SELinuxドキュメントにアクセスしてください。
これで、PHPサービスを開始して有効にする準備が整いました。 あなたの rh-php70-php-fpm
サービスを提供し、起動時に開始できるようにします。
- sudo systemctl start rh-php70-php-fpm
- sudo systemctl enable rh-php70-php-fpm
次に、あなたのステータスを確認します rh-php70-php-fpm
サービス:
- sudo systemctl status rh-php70-php-fpm
次のような出力が表示されます。
Output● rh-php70-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago
Main PID: 1852 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/rh-php70-php-fpm.service
├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf)
├─1853 php-fpm: pool www
├─1854 php-fpm: pool www
├─1855 php-fpm: pool www
├─1856 php-fpm: pool www
└─1857 php-fpm: pool www
Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.
このプロセスを繰り返して、 rh-php72-php-fpm
サービスを提供し、起動時に開始できるようにします。
- sudo systemctl start rh-php72-php-fpm
- sudo systemctl enable rh-php72-php-fpm
次に、あなたのステータスを確認します rh-php72-php-fpm
サービス:
- sudo systemctl status rh-php72-php-fpm
次のような別の出力が表示されます。
Output● rh-php72-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago
Main PID: 1876 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/rh-php72-php-fpm.service
├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf)
├─1877 php-fpm: pool www
├─1878 php-fpm: pool www
├─1879 php-fpm: pool www
├─1880 php-fpm: pool www
└─1881 php-fpm: pool www
Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.
この時点で、サーバーに2つのPHPバージョンがインストールされています。 次に、展開するWebサイトごとにディレクトリ構造を作成します。
ステップ2—両方のWebサイトのディレクトリ構造を作成する
このセクションでは、2つのWebサイトそれぞれのドキュメントルートディレクトリとインデックスページを作成します。
まず、両方のドキュメントルートディレクトリを作成します site1.your_domain
と site2.your_domain
:
- sudo mkdir /var/www/site1.your_domain
- sudo mkdir /var/www/site2.your_domain
デフォルトでは、ApacheWebサーバーは apache
ユーザーと apache
グループ。 そう /var/www/
また、そのすべてのファイルとサブディレクトリもそれらによって所有されている必要があります。 次のコマンドを実行して、Webサイトのルートディレクトリの正しい所有権と権限を確認します。
- sudo chown -R apache:apache /var/www/site1.your_domain
- sudo chown -R apache:apache /var/www/site2.your_domain
- sudo chmod -R 755 /var/www/site1.your_domain
- sudo chmod -R 755 /var/www/site2.your_domain
The chown
コマンドは、2つのWebサイトディレクトリの所有権をに変更します apache
ユーザーと apache
グループ。 The chmod
コマンドは、そのユーザーとグループ、およびその他に関連付けられている権限を変更します。
次に、を作成します info.php
各Webサイトのルートディレクトリ内のファイル。 これにより、各WebサイトのPHPバージョン情報が表示されます。 で始まる site1
:
- sudo vi /var/www/site1.your_domain/info.php
次の行を追加します。
<?php phpinfo(); ?>
ファイルを保存して閉じます。 次に、 info.php
作成したファイル site2
:
- 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
. ここでは、PHP7.0を使用してコンテンツをレンダリングするようにApacheに指示します。
- sudo vi /etc/httpd/conf.d/site1.your_domain.conf
次のコンテンツを追加します。 Webサイトのディレクトリパス、サーバー名、ポート、およびPHPのバージョンが設定と一致していることを確認してください。
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
SetHandler "proxy:fcgi://127.0.0.1:9002
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php70-fcgi .php
Action php70-fcgi /cgi-bin/php70.fcgi
ErrorLog /var/log/httpd/site1.your_domain_error.log
CustomLog /var/log/httpd/site1.your_domain_access.log combined
</VirtualHost>
為に DocumentRoot
Webサイトのルートディレクトリのパスを指定しています。 為に ServerAdmin
あなたはそのメールを追加しています your_domain
サイト管理者がアクセスできます。 為に ServerName
最初のサブドメインのURLを追加します。 為に SetHandler
ポートを指定しています 9002
. 残りのディレクティブも、PHP7.0をデプロイするようにサービスを構成します。
ファイルを保存して閉じます。
次に、Webサイトの新しい仮想ホスト構成ファイルを作成します site2.your_domain
. PHP 7.2をデプロイするには、このサブドメインを指定します。
- sudo vi /etc/httpd/conf.d/site2.your_domain.conf
次のコンテンツを追加します。 繰り返しになりますが、Webサイトのディレクトリパス、サーバー名、ポート、およびPHPのバージョンが一意の情報と一致していることを確認してください。
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
SetHandler "proxy:fcgi://127.0.0.1:9003
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php72-fcgi .php
Action php72-fcgi /cgi-bin/php72.fcgi
ErrorLog /var/log/httpd/site2.your_domain_error.log
CustomLog /var/log/httpd/site2.your_domain_access.log combined
</VirtualHost>
終了したら、ファイルを保存して閉じます。 次に、Apache構成ファイルで構文エラーがないか確認します。
- sudo apachectl configtest
出力印刷が表示されます Syntax OK
:
- OutputSyntax OK
最後に、Apacheサービスを再起動して、変更を実装します。
- sudo systemctl restart httpd
各サイトにサービスを提供するようにApacheを構成したので、それらをテストして、適切なPHPバージョンが実行されていることを確認します。
ステップ4—両方のWebサイトをテストする
この時点で、2つの異なるバージョンのPHPを実行するように2つのWebサイトを構成しました。 次に、結果をテストします。
Webブラウザーを開き、両方のサイトにアクセスします http://site1.your_domain
と http://site2.your_domain
. 次のような2つのページが表示されます。
タイトルに注意してください。 最初のページはそれを示しています site1.your_domain
PHPバージョン7.0をデプロイしました。 2番目はそれを示します site2.your_domain
PHPバージョン7.2をデプロイしました。
サイトをテストしたので、 info.php
ファイル。 これらにはサーバーに関する機密情報が含まれており、権限のないユーザーがアクセスできるため、セキュリティの脆弱性があります。 ファイルを削除します。
- sudo rm -rf /var/www/site1.your_domain/info.php
- sudo rm -rf /var/www/site2.your_domain/info.php
これで、2つの異なるPHPバージョンを持つ2つのWebサイトを処理する単一のCentOS7サーバーができました。 ただし、PHP-FPMはこの1つのアプリケーションに限定されません。
結論
これで、仮想ホストとPHP-FPMを組み合わせて、単一のサーバーで複数のWebサイトと複数のバージョンのPHPを提供できるようになりました。 Apacheサービスが処理できるPHPサイトとPHPバージョンの数に対する実際的な制限は、インスタンスの処理能力だけです。
ここから、アダプティブスポーンプロセスやログ記録方法など、PHP-FPMのより高度な機能の調査を検討できます。 sdtout
と stderr
または、Webサイトを保護することもできます。 これを実現するには、Let’sEncryptの無料のTLS/SSL証明書を使用してサイトを保護する方法に関するチュートリアルに従ってください。