Image

ナレッジベース → 同じドメイン上の異なるフォルダーに異なる php バージョンを使用して 2 つの php-fpm サービスをセットアップする

[仮想サーバー]
公開日: 24.11.2022

タスクは、1つのWebサーバーnginxと1つのドメイン名に、異なるPHPバージョンを使用する2つのアプリケーションを同時に展開することです。今回の例では、ウェブサイトと顧客とのやり取り用のアプリケーション(CRM)を使用します。

タスクは、ウェブサイトを次のように開けるようにすることです:

  • domain.tld - (メインドメイン)
  • domain.tld/nested-app (アプリケーション)

セキュリティを確保するために、アプリケーションのフォルダは、サイトと同じ階層に配置する必要があります。これにより、サイトが侵害された場合でも、攻撃者がアプリケーションのファイルにアクセスすることを防ぎます。今回は、CentOS 7での設定を行います。

  • /var/www/domain.tld/site - (サイトフォルダ)
  • /var/www/domain.tld/nested-app - (アプリケーションフォルダ)

ご覧の通り、これらは階層上で同じレベルにあります。アプリケーションは異なるPHPバージョンを使用しているため、2つ目のphp-fpmサービスをインストールし、PHPを設定し、nginxでこれを設定する必要があります。

1. PHP 8とphp-fpmサービスをインストールします

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

remi リポジトリ設定で php 8 を有効にし、必要なパッケージをインストールしましょう。

apt install php php-fpm php-mysql php-common php-cli php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl

2. php 7 と 2 番目の php-fpm サービスをインストールする

yum install centos-release-scl
yum install rh-php73 rh-php73-php-fpm
scl enable rh-php73 bash
semanage port -a -t http_port_t -p tcp 9003
systemctl start rh-php73-php-fpm
systemctl enable rh-php73-php-fpm

すべてを構成する準備が整いました。この構成では、自動開始するサービスを追加しました。

3. nginx のインストールと設定

yum install nginx

ドメインの構成は次のようになります:

/etc/nginx/conf.d/domain_tld.conf
server { 

listen xx.x.xx.x:443 ssl;
listen [ipv6]:443 ssl; 
server_name domain.tld www.domain.tld; 
index index.php index.html;

 set $base /var/www/domain.tld;
 root $base/site;
 ssl_certificate /etc/ssl/domain_tld/cert23.crt;
 ssl_certificate_key /etc/ssl/domain_tld/cert23.key;
 client_body_timeout 5s;
 client_header_timeout 5s;
 client_max_body_size 32m;
 ssl_session_timeout 5m;

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_prefer_server_ciphers on;

 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";
 ssl_stapling on;
 ssl_stapling_verify on;

 gzip on;
 gzip_disable "msie6";

 gzip_types text/plain text/css application/json application/x-javascript text/xml 
application/xml application/xml+rss text/javascript application/javascript;

# -- www to no www --

 if ($host ~* ^www.domain.tld$) {
 rewrite ^(.*)$ https://domain.tld$1 permanent;
 }
# -- www to no www --

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

location ^~ /nested-app {alias $base/nested-app;

        if (!-e $request_filename) {
            rewrite ^ /nested-app/index.php last;        }

location ~ \.php$ {
            if (!-f $request_filename) {rewrite ^
            /nested-app/index.php last;
            } include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:9003;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            }
  }
location ~ \.php$ { include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000; 
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}

私たちの場合:

*domain.tld - ポート 9000 で実行されます *domain.tld/nested-app - ポート 9003 で実行

デフォルトではどちらもポート 9000 を持っているため、必要な PHP に応じて、それぞれの設定でポートを指定します。

これは構成ファイルで行われます。

  • メイン用 /etc/php-fpm.d/www.conf
  • php 7 で追加の場合 /etc/opt/rh/rh-php73/php-fpm.d/www.conf

構成を適用するには、すべてのサービスを再起動する必要があります

systemctl restart rh-php73-php-fpm
systemctl restart php-fpm
systemctl restart nginx




No Comments Yet