웹사이트 검색

Nginx에서 다양한 PHP 버전으로 여러 웹사이트를 실행하는 방법


때때로 PHP 개발자는 동일한 웹 서버에서 다양한 버전의 PHP를 사용하여 다양한 웹사이트/애플리케이션을 구축하고 실행하기를 원합니다. Linux 시스템 관리자로서 귀하는 단일 웹 서버(예: Nginx)에서 다양한 PHP 버전을 사용하여 여러 웹사이트를 실행할 수 있는 환경을 설정해야 합니다.

이 튜토리얼에서는 여러 버전의 PHP를 설치하고 웹 서버 Nginx가 서버 블록(Apache의 가상 호스트)을 통해 작동하도록 구성하는 방법을 설명합니다. LEMP 스택을 사용하는 CentOS/RHEL 7 배포판.

추가 읽기: Pyenv – 특정 프로젝트에 대해 여러 Python 버전 설치

NginxPHP FastCGI의 대체 구현인 PHP-FPM(FastCGI 프로세스 관리자를 나타냄)을 사용합니다. 로드가 많은 웹사이트에 유용한 추가 기능입니다.

테스트 환경 설정

  1. 최소한의 설치로 CentOS 7 또는 RHEL 7 서버.
  2. Nginx HTTP 서버.
  3. PHP 7.1(기본 버전으로 사용) 및 5.6.
  4. MariaDB 데이터베이스 서버.
  5. 서버 IP 주소: 192.168.56.10.
  6. 웹사이트: example1.comexample2.com.

1단계: EPEL 및 Remi 저장소 설치 및 활성화

1. 먼저 최신 버전의 PHP를 제공하는 EPELRemi 저장소를 설치하고 활성화하여 시작하세요. 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 웹 서버 설치

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. 그런 다음 아래 스크립트를 사용하여 데이터베이스 서버 설치를 보호합니다. 루트 비밀번호를 설정하고 y로 대답하고 [Enter] 키를 눌러 나머지 후속 질문에 대해 원격 루트 사용자 로그인을 비활성화하고 익명 사용자 계정을 제거하고 데이터베이스를 테스트합니다. 기본값은 익명 사용자를 포함한 모든 사용자가 액세스할 수 있습니다.

mysql_secure_installation

추가 읽기: Linux용 MySQL/MariaDB 보안 모범 사례 12가지

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 프로세스의 사용자/그룹과 그들이 수신할 포트를 정의해야 합니다.

편집할 다음 두 가지 구성 파일이 있습니다.

  • 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 요청이 수신될 address:port를 정의합니다.

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

12. 위 구성이 모두 완료되면 Nginx, MariaDBPHP-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 인스턴스인 php56-php-fpm을 시작하는 동안 오류가 발생하는 경우 SELinux 정책이 차단될 수 있습니다. 시작부터요. SELinux가 강제 모드인 경우 허용 모드로 설정한 다음 서비스를 다시 시작해 보세요.

getenforce
setenforce 0 

6단계: 권한이 있는 웹사이트 설정

13. 이제 /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단계: 웹사이트용 Nginx 서버 블록 설정

15. 이제 /etc/nginx/conf.d/에 있는 서버 블록 구성 파일을 사용하여 Nginx가 웹사이트에 대한 요청을 처리하는 방법을 구성합니다.

.conf 확장자로 끝나는 웹사이트에 대한 구성 파일을 만듭니다.

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. 마지막으로 서버가 두 가지 버전의 PHP를 사용하고 있는지 테스트해야 합니다. 표시된 대로 웹사이트의 문서 루트 디렉터리에 매우 기본적인 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-fpmphp56-php-를 다시 시작해야 합니다. fpm. 하지만 먼저 Nginx 구성 파일에서 구문 오류가 있는지 확인할 수 있습니다.

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

19. 마지막으로 해야 할 일이 하나 더 있습니다. 특히 서버를 로컬에서 실행하는 경우 다음과 같이 /etc/hosts 파일을 사용하여 로컬 DNS를 설정해야 합니다. 아래 스크린샷.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. 마지막으로 웹 브라우저를 열고 다음 주소를 입력하여 시스템에 설치된 PHP 버전을 확인합니다.

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

그게 다야! 이제 다양한 PHP 버전으로 파일을 배포하고 웹사이트를 테스트할 수 있습니다. 추가할 사항이나 제기할 질문이 있는 경우 아래 의견 양식을 활용하세요.