Skip to content

php fpm pool split

Been Kyung-yoon edited this page Mar 15, 2023 · 4 revisions

php fpm pool 분리

기존 https://github.com/php79/stack/issues/10 에서 고민하던 것인데, 구조 및 설계가 달라져야 하므로 2.0 에서 고려

현재 방식

php 버전 당 기본 www pool 만 제공중.

장점

  • nginx 설정에서 사이트간 php 버전 전환이 용이함.

  • 구성이 단순하므로 수동 설치 용이

  • 사용량이 적은 사이트가 많은 서버일 경우 메모리 절약에 유리함.

단점

  • 단점: 같은 pool 을 사용하므로, php ini 설정을 사이트 단위로 구분할 수 없음.
    • nginx 단에서 fastcgi 설정으로 제어하는 형태는 이미 2개 이상 사이트에서 문제가 발견되어 도입 불가한 것으로 판명됨

개선 방식

사이트 단위로 php fpm pool 이 생성 필요.

  • PHP 7.0 의 경우, /etc/opt/remi/php70/php-fpm.d/ 디렉토리에서 기본 www.conf 를 복사하여 site1.conf 생성
[site1]

;listen = 127.0.0.1:9070
listen = /var/run/php-fpm/site1.sock
listen.owner = nobody
listen.group = nobody
php_admin_value[upload_tmp_dir] = /home/site1/tmp
php_admin_value[session.save_path] = /home/site1/session
php_admin_value[open_basedir] = /home/site1
php_admin_value[error_log] = /home/site1/logs/php-fpm-error.log
  • Nginx 사이트 설정에서 $APP_BACKEND 부분 변경. /etc/nginx/conf.d/site1.conf
upstream site1_backend {
    server unix:/var/run/php-fpm/site1.sock;
}
server {
    #set $APP_BACKEND php70_backend;
    set $APP_BACKEND site1_backend;

장점

  • 사이트 단위로 open_basedir 제어하여, 1개 사이트 해킹시에도 해당 계정 디렉토리를 벗어날 수 없음

  • 에러 로그 등을

  • 부하가 높은 사이트와 그렇지 않은 사이트의 php-fpm 프로세스 수를 구분하여 제어 가하고, PHP 부하가 높은 사이트를 프로세스의 pool 이름(site1 ..>)으로 쉽게 파악 가능.

단점

  • 초기 셋팅시 복잡도 증가

  • php 버전 전환시 pool 설정 자체를 다른 버전으로 옮겨야 하므로, 수작업이 필요할 것으로 예상.

  • 현재 0.9.9 버전과 구조가 많이 달라지므로, 신규 변경과 이미 설치된 서버의 호환성 유지에 적지 않은 고민 필요.

  • php-fpm pool 단위로 프로세스가 실행되어, 사이트수 증가시 메모리 자원 사용률이 높아짐. 다만 실 서버에서는 기본 메모리가 4~8GB에 달하고, 메모리 가격이 매우 저렴한 점을 고려하면, 효용성으로 커버 가능할 것으로 예상. 가상 머신 512 ram 에서 쾌적하게 돌아가야 하는 등의 제약은 실 업무와 거리가 멀기 때문에 고려하지 않도록 함.


참고

Clone this wiki locally