nginX에서 PHP 7, PHP 5 두개 이상의 여러버전을 함께 사용하기
작년 이맘때쯤 서버를 PHP7으로 올렸다가 현재 사용하고 있는 웹 팩스 서비스인 avantFAX의 MDB2 문제로 PHP7을 버리고 다시 PHP5로 복귀했다. 라즈베리파이를 이용해서 avantFAX와 팩스서버만 현재서버에서 빼내고 리버스
프록시를 이용해서 구축할까 생각만 하고 있던 차에 사무실에 클라우드가 필요해서 이것저것 알아보던 중 PHP를 기반으로 하고 ownCloud에서 파생되었다는 nextcloud를 서버에 설치하기로 마음 먹고 실행에 옮겼다. 이때부터 다시 문제가 시작 되었다.
nextcloud를 설치하다가 다음 메세지가 출력되었다.
This version of Nextcloud requires at least PHP 5.6.0 You are currently running 5.5.9-1ubuntu4.23. Please update your PHP version.
즉, PHP 5.6 이상 버전에서 사용하라는 것이다. 현재 시스템에 설치된것은 PHP 5.5.9 버전 (사실 이것도 시스템에서 몇일전에 업데이트 된것인데…)
avantFAX를 사용하려면 PHP 5.X 버전을 사용해야 되고 이왕 업그레이드 할것이라면 PHP 7.X를 쓰고 싶었는데 두개의 마음이 계속 상충되고 있었다. 그러다가 가만히 문득 든 생각이 nginX에서는 PHP가 FastCGI로 작동하니까 php-fpm만 각 버전별로 작동시키면 되지 않을까 싶었다. 그리고 구글링을 해보니 역시나….자료는 많이 없지만 된다고 나와 있다. 1년전에 이런 생각을 했어도 이미 사용하고 있었을텐데..하는 아쉬움은 있지만…
물론, apache의 경우도 mod_php 말고 FastCGI로 작동시킬수 있다고 합니다. 하지만 사무실 용도의 개인서버를 구축한 이후에 nginX만 사용해왔기 때문에 여기서는 nginX에서의 사용만 다룰려고 합니다.
현재 서버에 php5.5.9 우분투 배포버전이 설치되어 있어서 PHP 5 관련해서는 설치할 필요가 없습니다.
서버에는 최신버전인 PHP 7.2버전을 설치하고 싶었으나 nextcloud 문제로 7.1 버전을 설치하기로 했습니다.(nextcloud 소개할때 자세히 소개하기로 하죠.) 7.0, 7.1, 7.2 버전별 차이점은 7.0은 5.x에 비해 두배의 속도향상, 7.1버전은 7.0에 비해 10~20% 가량의 속도향상이 있다하고, 7.2버전은 속도보다 보안에 중점을 둔 버전이라고 합니다. 7.2의 경우 php의 mcrypt가 완전히 빠졌습니다. 보안을 강화한 버전이기 때문에 mcrypt가 보안상 문제가 있었다는 것으로 유추 해볼 수 있겠죠. 만약 다른 PG(카드결재대행)에서 제공하는 모듈이라던지, 다른 곳에서 제공되는 외부모듈을 사용해야 하는데 mcrypt를 써야한다면 자신에게 알맞는 버전을 선택해야 합니다.
물론 이 역시 여러가지 버전을 설치해서 사용해도 무방합니다.
PHP 7.x는 우분투를 위한 별도의 공식 저장소가 없습니다. 그래서 인터넷에 널리 알려진 PHP 7.x용 저장소로 ondrej/php PPA를 등록합니다. Ondřej Surý라는 분이 운영하는 곳으로 PHP, Apache2, mysql에 대한 PPA를 제공하는 분으로 데비안 관련 패키지들을 개발하시는 분입니다. 데비안이 엄격한 패키지 관리를 하는것으로 유명하니 이분의 PPA도 믿을만 하겠죠 ?
# sudo add-apt-repository ppa:ondrej/php # sudo apt-get update # sudo apt-get install php7.1 php7.1-fpmphp7.1-mysql php7.1-xml 등 다른 패키지들도 설치해야 할게 있다면 설치하셔야 합니다. 5.x나 자신이 사용하고 있는 프로그램의 지원내용을 살펴보시고 다른 패키지도 설치해야 한다면 다시한번 apt-get install 을 이용해서 설치해주시기 바랍니다.
이제 /etc/nginx/sites-available에 있는 파일 내용을 수정해주어야 합니다.
기존 php-fpm은 /var/run/php5-fpm.sock로 새로 설치된 php7.1은 /var/run/php/php7.1-fpm.sock 에 있습니다. 각 사이트 별로 해당 버전에 맞는 php-fpm을 작동시켜줘야 합니다.
각 설정파일마다 아래와 같은 부분을 해당 버전에 맞게 수정 해줍니다. fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
혹은
upstream php-handler { server unix:/var/run/php/php7.1-fpm.sock; } server { fastcgi_pass php-handler; }
이렇게 표현된 곳도 있으니 마찬가지로 php-fpm의 경로명과 버전에 맞는 fpm을 지정만 해주시면 되겠습니다.
[peg-image src=”https://lh3.googleusercontent.com/-JgSrbD-Ww9s/WqN_MlQLakI/AAAAAAAAFds/1-ulfX_AL6k6ifz6srAqJnjvcatE5PiiACCoYBhgL/s144-o/avantFax.jpg” href=”https://picasaweb.google.com/115330693669285320800/6531202718427505105#6531203738752477762″ caption=”” type=”image” alt=”avantFax.jpg” image_size=”700×380″ ]
[peg-image src=”https://lh3.googleusercontent.com/-leHycUJRuOQ/WqN_Mt6K9mI/AAAAAAAAFds/wao_PzwGo-0wPYQeGK1eO010NSpKX7iogCCoYBhgL/s144-o/akalhome.jpg” href=”https://picasaweb.google.com/115330693669285320800/6531202718427505105#6531203741076092514″ caption=”” type=”image” alt=”akalhome.jpg” image_size=”700×380″ ]
[peg-image src=”https://lh3.googleusercontent.com/-b8o5X-_M7ck/WqN_MidaUCI/AAAAAAAAFds/OwtihjhQP_c30rfONjqT2uyJ4pDCLVBiwCCoYBhgL/s144-o/nextcloud.jpg” href=”https://picasaweb.google.com/115330693669285320800/6531202718427505105#6531203738002673698″ caption=”” type=”image” alt=”nextcloud.jpg” image_size=”700×380″ ]
물론 일관된 관리와 운영, 메모리 리소스 등의 문제를 생각한다면, 하나의 버전으로 일정하게 서비스 해야 더욱 좋겠지만 사용해야 하는 프로그램 때문에 혹은 테스트서버나 개발서버로 사용중이거나 여건상 여러개의 서버를 분리할 형편이 되지 않는 분들에게는 대안적인 훌륭한 방법이라고 생각된다. 언젠가 PHP5.x 대가 완전히 지원이 되지 않는 그 시기가 온다면 아예 사용하지 못하게 될 녀석들도 있겠지만…(그전에 avantFAX가 제발 7.x 버전을 지원하기만을 간절히 바래본다.)
1 Response
[…] Source: akal.co.kr/?p=1549 […]