ウェブサイト検索

Nginx で異なる PHP バージョンで複数の Web サイトを実行する方法


PHP 開発者は、同じ Web サーバー上で異なるバージョンの PHP を使用して、異なる Web サイト/アプリケーションを構築して実行したい場合があります。 Linux システム管理者は、単一の Web サーバー (Nginx) 上で異なる PHP バージョンを使用して複数の Web サイトを実行できる環境をセットアップする必要があります。

このチュートリアルでは、PHP の複数のバージョンをインストールし、サーバー ブロック (Apache の仮想ホスト) を介してそれらと連携するように Web サーバー Nginx を設定する方法を説明します。 LEMP スタックを使用する CentOS/RHEL 7 ディストリビューション。

こちらもお読みください: Pyenv – 特定のプロジェクトに複数の Python バージョンをインストールする

Nginx は、PHP-FPM (FastCGI Process Manager の略) を使用します。これは、いくつかの機能を備えた代替の PHP FastCGI 実装です。負荷の高い Web サイト向けの追加の便利な機能。

テスト環境のセットアップ

  1. 最小限のインストールが必要な CentOS 7 または RHEL 7 サーバー。
  2. Nginx HTTP サーバー。
  3. PHP 7.1 (デフォルトのバージョンとして使用) および 5.6。
  4. MariaDB データベース サーバー。
  5. サーバー IP アドレス: 192.168.56.10
  6. ウェブサイト: example1.com および example2.com

ステップ 1: EPEL と Remi リポジトリのインストールと有効化

1. まず、EPELRemi リポジトリをインストールして有効にすることから始めます。これらのリポジトリは、PHP の最新バージョンを提供します。 CentOS/RHEL 7 ディストリビューションにスタックします。

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

2. 次に、yum のネイティブ機能を拡張し、有効にするために使用される yum-config-manager コマンドを提供する yum-utils パッケージをインストールします。または、システム上の Yum リポジトリを無効にします。

yum install yum-utils

: RHEL 7 では、次のコマンドを使用して、一部の依存関係に対してオプションのチャネルを有効にできます。

subscription-manager repos --enable=rhel-7-server-optional-rpms

ステップ 2: Nginx Web サーバーのインストール

3. 最新バージョンの Nginx をインストールするには、公式 Nginx リポジトリを追加し、/etc/yum.repos.d/nginx.repo という名前のファイルを作成する必要があります。

vi /etc/yum.repos.d/nginx.repo

ディストリビューションに従って、次の行をファイルに追加します。

--------------- On CentOS 7 --------------- 
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=0 
enabled=1 


--------------- On RHEL 7 ---------------
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/ 
gpgcheck=0 
enabled=1 

4. nginx リポジトリが追加されたら、次のように yum パッケージ マネージャー ツールを使用して Nginx をインストールできます。

yum install nginx

ステップ 3: MariaDB データベースサーバーのインストール

5. MariaDB の最新バージョンをインストールするには、公式 MariaDB リポジトリを追加し、/etc/yum.repos.d/mariadb.repo という名前のファイルを作成する必要があります。

vi /etc/yum.repos.d/mariadb.repo

ディストリビューションに従って、次の行をファイルに追加します。

--------------- On CentOS 7 --------------- 
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 

6. MariaDB リポジトリが追加されたら、次のように yum パッケージ マネージャー ツールを使用して MariaDB をインストールできます。

yum install MariaDB-client MariaDB-server

7. その後、以下のスクリプトを使用してデータベース サーバーのインストールを保護します。 root パスワードを設定し、y と答えて、残りの質問に対して [Enter] を押して、リモート root ユーザー ログインを無効にし、匿名ユーザー アカウントを削除してデータベースをテストします。デフォルトには、匿名ユーザーを含むすべてのユーザーがアクセスできます。

mysql_secure_installation

こちらもお読みください: Linux 向けの 12 の MySQL/MariaDB セキュリティのベスト プラクティス

ステップ 4: 複数のバージョンの PHP をインストールする

8. プロジェクトに異なるバージョンの PHP をインストールするには、yum-config-manager コマンドを使用して、示されているように、複数のバージョンの PHP と最も必要なモジュールをインストールします。

PHP 7.1 バージョンをインストールする

yum-config-manager --enable remi-php71  [Default]
yum install php php-common php-fpm
yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo

PHP 5.6 バージョンをインストールする

yum install php56 php56-php-common php56-php-fpm
yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo

9. PHP をインストールしたら、次のコマンドを使用して、サーバーで使用されている PHP のデフォルト バージョンを確認できます。

php -v

ステップ 5: PHP-FPM および PHP56-PHP-FPM の構成

10. これは、このチュートリアルの最も興味深い部分です。サーバー上で実際に複数の PHP バージョンを実行する方法を説明します。ここでは、Nginx が動作するさまざまなバージョンのphp-fpm を設定します。 FastCGI プロセスのユーザー/グループと、それらがリッスンするポートを定義する必要があります。

編集するのは次の 2 つの構成ファイルです。

  • php-fpm (デフォルト 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

上記のファイルを開き、FastCGI プロセスのユーザー/グループを設定します。

vi /etc/php-fpm.d/www.conf   [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 

デフォルト値はapacheになっているはずですが、示されているようにnginxに変更します。

user = nginx
group = nginx

11. 次に、リッスン パラメータを見つけて、FastCGI リクエストを受信するアドレス: ポートを定義します。

listen = 127.0.0.1:9000	[php-fpm]
listen = 127.0.0.1:9001	[php56-php-fpm]

12. 上記の設定をすべて完了したら、NginxMariaDBPHP-FPM を起動して有効にする必要があります。システム起動時に自動起動します。

systemctl enable nginx 
systemctl start nginx 

systemctl enable mariadb 
systemctl start mariadb 

---------------- PHP 7.1 ---------------- 
systemctl enable php-fpm 
systemctl start php-fpm 

---------------- PHP 5.6 ----------------
systemctl enable php56-php-fpm 
systemctl start php56-php-fpm 

注意: PHP の 2 番目のインスタンス php56-php-fpm の起動中にエラーが発生した場合は、SELinux ポリシーがブロックしている可能性があります。それは始まりからです。 SELinux が強制モードにある場合は、 それを許可モードに設定してから、サービスをもう一度開始してみてください。

getenforce
setenforce 0 

ステップ 6: 権限のある Web サイトをセットアップする

13. この時点で、Web サイトに必要なディレクトリを /var/www/html/ に作成できるようになりました。次のように、ログを保存するディレクトリを作成する必要もあります。

---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/ 
mkdir -p /var/log/nginx/example1.com/ 
 

---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/ 

14. すべてのディレクトリに適切な所有権権限を設定します。

---------------- Website 1 ----------------
chown -R root:nginx /var/www/html/example1.com/ 
chmod -R 755 /var/www/html/example1.com/ 
chown -R root:nginx /var/log/nginx/example1.com/
chmod -R 660 /var/log/nginx/example1.com/ 

---------------- Website 2 ----------------
chown -R root:nginx /var/www/html/example2.com/ 
chmod -R 755 /var/www/html/example2.com/
chown -R root:nginx /var/log/nginx/example2.com/ 
chmod -R 660 /var/log/nginx/example2.com/

ステップ 7: Web サイトの Nginx サーバー ブロックをセットアップする

15. 次に、/etc/nginx/conf.d/ にあるサーバー ブロック設定ファイルを使用して、Nginx が Web サイトへのリクエストを処理する方法を設定します。

.conf 拡張子で終わる Web サイトの構成ファイルを作成します。

vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf

次に、次のサーバー ブロック構成をそれぞれのファイルに貼り付けます。

ウェブサイト 1

server {
        listen 80;
        server_name example1.com www.example1.com;

        root   /var/www/html/example1.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example1.com/example1_access_log;
        error_log   /var/log/nginx/example1.com/example1_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example1.com/;
                fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

ウェブサイト 2

server {
        listen 80;
        server_name example2.com www.example2.com;

        root    /var/www/html/example2.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example2.com/example2_access_log;
        error_log  /var/log/nginx/example2.com/example2_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example2.com/;
                fastcgi_pass   127.0.0.1:9001;	#set port for php56-php-fpm to listen on
	        fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

16. /etc/nginx/nginx.conf の http ブロックの最後の部分に次の行があることを確認してください。 Nginx の実行時に、すべての設定ファイルを /etc/nginx/conf.d/ ディレクトリ内に含めると役立ちます。

include /etc/nginx/conf.d/*.conf;

ステップ 8: さまざまな PHP バージョンをテストする

17. 最後に、サーバーが 2 つのバージョンの PHP を使用していることをテストする必要があります。以下に示すように、Web サイトのドキュメント ルート ディレクトリに非常に基本的な info.php スクリプトを作成できます。

echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18. 上記で行ったすべての変更を適用するには、Nginxphp-fpm、および php56-php- を再起動する必要があります。エフピーエムです。ただし、実行する前に、まず Nginx 構成ファイルに構文エラーがないかどうかを確認することができます。

nginx -t 
systemctl restart nginx php-fpm php56-php-fpm

19. 最後にやるべきことがもう 1 つあります。特にサーバーをローカルで実行している場合は、次のように /etc/hosts ファイルを使用してローカル DNS を設定する必要があります。以下のスクリーンショット。

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. 最後に、Web ブラウザを開いて次のアドレスを入力し、システムにインストールされている PHP のバージョンを確認します。

http://example1.com/index.php
http://example2.com/index.php

それでおしまい!ファイルをデプロイし、さまざまな PHP バージョンで Web サイトをテストできるようになりました。追加や質問がある場合は、以下のコメント フォームをご利用ください。