불금이지만 지독히도 운이 없는 저는 일에 쫓겨 새벽녁에 집에 들어 왔습니다. 너무 늦어서 일까요 잠이 오질 않아서 그동안 생각만 하고 있었던 PHP를 최신 버전으로 업데이트 하고 PHP 7.1 설치 방법을 정리해 보기로 했습니다.
조금이라도 사이트 속도에 도움이 된다면, 새롭게 공부하는 것을 어찌 두려워하겠습니까? 그래서 2016년 12월 발표된 PHP 7.1가 성능 개선되었다는 이야기가 있어서 업그레이드 하기로 했습니다.[참고] 최신 발표된 PHP 8 설치 방법은 아래 글을 참조
PHP 7.1 성능 개선 효과는 어느 정도일까?
PHP 7.1이 기존 PHP 7.0에 비해서 어느 정도 성능 개선이 있을까요?
테스트 보고에 따라 다릅니다. 약 6~7% 정도의 약간의 성능 개선이 있다고 한 BM 테스트도 있고, 20%이상 성능 개선이 있다고 보고하는 벤치마킹 보고서도 있습니다.
찾아 본 자료 중에서 가장 긍정적으로 평가했던 자료를 인용해 봅니다.
심리적 위안도 매우 중요하지요.
▽ 설치 PHP 버젼별 성능 벤치마크,
이 표대로라면 PHP 7.1은 PHP 7.0에 비해서 18%~27% 성능 개선이 있다.
PHP 7.1로 업그레이드는 아래와 같은 몇가지 포스팅 내용을 참조해서 진행하였고 그 시행착오를 거쳐 나름대로 아래에서 재정리해 보았습니다.
How to upgrade to PHP 7.1 on Ubuntu
How to Install and Configure PHP 7.0 or PHP 7.1 on Ubuntu 16.04
1. PHP 7.1을 설치하기 위한 저장소 등록
PHP 7.1은 아직 공식 저장소가 없으므로 상대적으로 안전하다고 알려진 PHP 7.1용 저장소로 ondrej/php PPA를 등록합니다. 여기는 PHP 7.1을 소개하는 포스팅에서 대부분 소개하는 곳입니다.
apt-get install -y python-software-properties add-apt-repository -y ppa:ondrej/php apt-get update -y
2. 현재 설치된 PHP 패키지가 무엇이 있는지 확인
현재 시스템에 설치되어 있는 패키지가 무엇인지 확인합니다.
이 설치되어 있는 패키지 리스트를 PHP 7.1에서도 설치해 줘야 합니다.
dpkg -l | grep php | tee packages.txt
3. PHP 7.1 설치
이제 PHP 7.1를 설치하고 이어서 필요한 부가 패키지들을 설치합니다.
apt-get install php7.1 -y # PHP 7.1 설치
# 부가 패키지 설치 apt-get install php7.1-common php7.1-fpm php7.1-cli php7.1-curl php7.1-mbstring php7.1-gd php7.1-intl php7.1-xml php7.1-mysql php7.1-mcrypt php7.1-zip php-pear php7.1-gmp php7.1-intl php7.1-imap php7.1-json php7.1-ldap php7.1-ps php7.1-readline php7.1-tidy php7.1-xmlrpc php7.1-xsl
4. nginx를 사용한다면 php 관련 설정 변경
nginx를 사용한다면 nginx 설정 파일에서 PHP handler의 내용을 7.1로 바꿔야 합니다.
(이는 어느분이 댓글로 알려주셨는데요. 댓글을 삭제하셨는지 Disqus에서 보이질 않습니다. 댓글을 달았다고 메일이 왔는데도 disQus에서는 삭제된것 같다는 메세지만 나옵니다.)
변경해야하는 파일은 /etc/nginx/conf.d/default.conf 인데요. 이를 편집 화면으로 들어가서 PHP handler의 내용중
fastcgi_pass unix:/run/php/php7.0-fpm.sock; 을 fastcgi_pass unix:/run/php/php7.1-fpm.sock; 로 바꾸어줘야 합니다. 그래야 php7.1을 인식하고 php7.1로 작동합니다.
vi /etc/nginx/conf.d/default.conf # /etc/nginx/conf.d/default.conf 편집
PHP handler의 내용은 아래처럼 생겼습니다. 제가 적용하고 있는 내용인데요.
위에서 언급한대로 fastcgi_pass unix:/run/php/php7.0-fpm.sock; 을 fastcgi_pass unix:/run/php/php7.1-fpm.sock; 로 바꾸어줘야 합니다
# Add PHP handler location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass unix:/run/php/php7.1-fpm.sock; <---------- 이 부분을 7.1로 변경해야합니다. fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; # This file is present on Debian systems.. include fastcgi_params; }
4. 설치된 PHP 버젼 확인
php -v
이러면 PHP7.0은 아래와 같은 메세지를 출력할 겁니다.
PHP 7.0.19-1+deb.sury.org~xenial+2 (cli) (built: May 22 2017 12:48:42) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.19-1+deb.sury.org~xenial+2, Copyright (c) 1999-2017, by Zend Technologies
PHP 7.1로 업데이 후에는 아래와 같은 메세지를 뿜어냅니다.
PHP 7.1.6-1~ubuntu16.04.1+deb.sury.org+1 (cli) (built: Jun 9 2017 08:26:34) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.6-1~ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies root@happist:~# ^C root@happist:~#
6. PHP 설정 파일 최적화
Nginx에서 PHP 7.1의 설정 파일은 /etc/php/7.1/fpm/php.ini에 위치하고 있습니다.
vi /etc/php/7.1/fpm/php.ini
6.1. phpMyAdmin DB 업로드 용량 확대 세팅
phpMyAdmin에서 DB를 백업 받고 또 필요에 따라 DB 업로드하려면 업로드 용량 확대가 필요합니다.
아마 처음 PHP를 설치하면 2M로 설정되어 있어 금방 용량 부족으로 업로드가 불가능하게 됩니다.
이를 방지하기 위해서 php.ini에서도 용량을 증대합니다.
upload_max_filesize = 2M → 200M으로 변경 post_max_size = 2M → 200M으로 변경
phpMyAdmin DB 업로드 용량 확대 세팅에 대해서는 기존에 포스팅한[워드프레스 Tips] Nginx서버에서 phpMyAdmin DB 업로드 용량 확대 방법
을 참조하세요.
6.2. Enable Zend OPcache
Opcache는 PHP script 를 bytecode로 컴파일한 후에 공유 메모리에 저장하여 성능을 향상시키는 모듈이라고 합니다. Opcache 의 구현물은 다양하지만 Zend Opcache가 PHP 5.5부터 기본 모듈로 내장되었고 지속적으로 개발되고 있는 프로젝트이므로 이것을 사용하는 것이 좋을 것 같다고 하네요. 이는 아래 글에서 인용했습니다.
OPcache를 활성화하기 위해서는 php.ini파일에서 맨 아래에 아래와 같은 문구를 추가합니다.
zend_extension=opcache.so
6.3. 보안 관련 보완 추가
php.ini파일에서 보안관련 몇가지 사상을 추가하라는 추천이 있습니다.
disable_functions 기능 추가
이는 php.ini 파일 내의 disable_functions을 찾아 여기에 phpinfo,system,mail,exec 항목을 추가하는 것 입니다. phpinfo는 php 정보를 파악하기 위해서 서버에 올려주는 경우가 있는 제 이를 세팅 자체에서 불가능하게 만들는 옵션이네요.
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, phpinfo, system,mail,exec
file_uploads 기능을 사용하지 않는다.
보안을 위해서 file_uploads 기능을 사용하지 말라고 추천되고 있습니다.
저의 경우 이 file_uploads 기능은 쵝 워드프레스를 세팅 시 phpMySql에 dbㄹㄹ 올리면서 사용했고 그 외는 전혀 사용할 기회가 없었습니다. 그렇다면 보안 위협도 있다는데 굳이 사용할 이유가 없겠지요.
file_uploads = on을 off로 변경
sql.safe_mode 적용
이는 php.ini 파일에서 sql.safe_mode 항목을 찾아 on으로 변경합니다.
sql.safe_mode=off를 on으로 변경
allow_url_fopen 비적용
allow_url_fopen=off로 변경
register_globals = Off 추가
php.ini 파일 맨 마지막에 register_globals = Off 항목을 추가합니다.
PHP 7.1에서는 Memcache나 APCu extension가 설치될 수 없습니다.
7. php7.1-fpm 재시동
systemctl restart nginx.service php7.1-fpm.service
8. PHP 7.0 삭제하기
기본 버젼을 삭제하는 것은 누구는 옵션이라고 합니다. 또 누구는 엉킬 수 있으니 삭제하라고 하기도 합니다.
apt-get -y --purge autoremove
저의 경우는 PHP 7.0을 삭제하니 워드프레스가 작동하지 않아서 삭제하지 않고 남겨두었습니다.
(지금 생각해보니 PHP handler를 7.1로 변경하지 않아서 발생한 문제라는 생각입니다. 정상적으로 PHP handler를 7.1로 변경 적용했다면 문제가 없을 것으로 보입니다.)
서버 내용을 보니 PHP 5.6, PHP 7.0, PHP 7.1이 공존하고 있기는 합니다. 기존 버젼 삭제 시 문제도 생기고, 서버 용량이 남아돌고 있으므로 그냥 유지하기로 했습니다.
철저히 비교 대상을 제한해서 비교한것은 아니지만 php 7.1로 업그레이드 한 후 속도가 3.1초~2.9초대였다면 보통 2.7초대로 좋아졌습니다. 심리적으로 좋아졌다고 스스로 위안해 봅니다.
참고
PHP 25년 역사의 새장을 여는 PHP 8 설치 방법 – 우분투 및 데비안 기준
[워드프레스 최적화] 한층 빨라진 최신 php 7.3 설치 방법
[워드프레스 최적화] 보안과 서버 속도 개선을 위한 php 7.2 설치 방법 및 주의 사항
더 빠른 워드프레스를 위한 PHP 7.1 업그레이드 방법
서버 운영 관련
가성비가 뛰어난 Vultr 가상서버호스팅(클라우드호스팅,VPS) 사용기
Vultr 가상서버호스팅의 새상품 High Frequency 사용기
가상 서버를 운영하고픈 勇者에게 전하는 가상 서버 운영 입문 노하우 – Vultr 가상서버호스팅(VPS)를 중심으로
해외 가상서버호스팅(VPS)이 국내 호스팅보다 빠르다? – 아이비호스팅과 해외 가상서버호스팅 VULTR간 비교
사이트 운영을 위한 안내 – 웹서버 세팅에서 워드프레스 설치까지(우분투 17.10, NGINX 1.13.6, Marian DB 10.2, PHP7.2)
워드프레스 최적화를 위한 18개월간의 고민, 그 노하우를 담다.
새롭게 뉴스레터를 시작했습니다.
1️⃣ 주식 등 투자 정보 : 기업 분석, IB 투자의견 등 투자 관련 내용
..... 테슬라 실적 및 IB들의의 테슬라 투자의견
2️⃣ 사례 및 트렌드 : 사례연구와 트렌드 관련 괜찮은 내용
.....유튜브와 경쟁대신 구독 전환한 비디오 플래폼 비메오 사례