Nginx에서 다양한 PHP 버전으로 여러 웹사이트를 실행하는 방법
때때로 PHP 개발자는 동일한 웹 서버에서 다양한 버전의 PHP를 사용하여 다양한 웹사이트/애플리케이션을 구축하고 실행하기를 원합니다. Linux 시스템 관리자로서 귀하는 단일 웹 서버(예: Nginx)에서 다양한 PHP 버전을 사용하여 여러 웹사이트를 실행할 수 있는 환경을 설정해야 합니다.
이 튜토리얼에서는 여러 버전의 PHP를 설치하고 웹 서버 Nginx가 서버 블록(Apache의 가상 호스트)을 통해 작동하도록 구성하는 방법을 설명합니다. LEMP 스택을 사용하는 CentOS/RHEL 7 배포판.
추가 읽기: Pyenv – 특정 프로젝트에 대해 여러 Python 버전 설치
Nginx는 PHP FastCGI의 대체 구현인 PHP-FPM(FastCGI 프로세스 관리자를 나타냄)을 사용합니다. 로드가 많은 웹사이트에 유용한 추가 기능입니다.
테스트 환경 설정
- 최소한의 설치로 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. 먼저 최신 버전의 PHP를 제공하는 EPEL 및 Remi 저장소를 설치하고 활성화하여 시작하세요. 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, 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 인스턴스인 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-fpm 및 php56-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 버전으로 파일을 배포하고 웹사이트를 테스트할 수 있습니다. 추가할 사항이나 제기할 질문이 있는 경우 아래 의견 양식을 활용하세요.