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 サイト向けの追加の便利な機能。
テスト環境のセットアップ
- 最小限のインストールが必要な CentOS 7 または RHEL 7 サーバー。
- Nginx HTTP サーバー。
- PHP 7.1 (デフォルトのバージョンとして使用) および 5.6。
- MariaDB データベース サーバー。
- サーバー IP アドレス: 192.168.56.10。
- ウェブサイト: example1.com および example2.com。
ステップ 1: EPEL と Remi リポジトリのインストールと有効化
1. まず、EPEL と Remi リポジトリをインストールして有効にすることから始めます。これらのリポジトリは、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. 上記の設定をすべて完了したら、Nginx、MariaDB、PHP-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. 上記で行ったすべての変更を適用するには、Nginx、php-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 サイトをテストできるようになりました。追加や質問がある場合は、以下のコメント フォームをご利用ください。