Image

지식 기반 → 동일한 도메인의 서로 다른 폴더에 서로 다른 PHP 버전을 사용하여 두 개의 php-fpm 서비스 설정

[가상 서버]
출판 날짜: 24.11.2022

작업은 하나의 nginx 웹 서버와 하나의 도메인 이름에 서로 다른 PHP 버전을 사용하는 두 개의 애플리케이션을 동시에 배포하는 것입니다. 이 예에서는 고객과의 상호 작용(CRM)을 위한 웹 사이트 및 애플리케이션이 됩니다.

작업은 사이트를 공개하는 것입니다.

  • domain.tld - (메인 도메인)
  • domain.tld/nested-app (애플리케이션)

보안을 보장하려면 응용 프로그램 폴더가 사이트와 동일한 수준에 있어야 합니다. 그래야 사이트가 해킹당하더라도 공격자가 응용 프로그램 파일에 접근할 수 없으며 그 반대의 경우도 마찬가지입니다. 이 예에서는 Centos 7에서 설정하고 있습니다.

  • /var/www/domain.tld/site - (사이트 폴더)
  • /var/www/domain.tld/nested-app - (응용 프로그램 폴더)

보시다시피 계층 구조에서 동일한 수준에 있습니다. 애플리케이션은 서로 다른 PHP 버전을 사용하므로 php와 함께 두 번째 php-fpm 서비스를 설치 및 구성하고 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과 두 번째 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에서 실행됩니다.

필요한 PHP에 따라 각각의 설정에서 포트를 지정하십시오. 기본적으로 둘 다 포트 9000을 갖기 때문입니다.

이는 구성 파일에서 수행됩니다.

  • 메인의 경우 /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