PHP FastCGI: 사이트별 php.ini 설정과 테스트
테스트
먼저 각 사이트에서 PHP가 FastCGI로 동작하는지 확인합니다. 예시로 www.example1.com 사이트에 간단한 phpinfo() 파일을 만듭니다.
vi /srv/www/web1/web/info.php코드 내용:
웹브라우저에서 http://www.example1.com/info.php 를 호출합니다. 출력 결과에서 Server API 라인에 “CGI/FastCGI”가 표시되어야 합니다.

Important: phpinfo() 페이지는 운영 환경에 그대로 노출하면 보안 리스크가 있으니, 테스트 후 반드시 제거하거나 접근을 제한하세요.
사이트별 custom php.ini 설정
각 웹사이트는 고유한 php-fcgi-starter 래퍼 스크립트를 사용하므로, 사이트별로 다른 php.ini 파일을 지정할 수 있습니다. 예시: 기본 php.ini를 복사해 www.example2.com에 고유 설정을 둡니다.
cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini원한다면 /srv/www/web2/php.ini 파일을 편집해 사이트별 설정을 변경합니다.
그리고 web2의 php-fcgi-starter 스크립트를 열어 PHPRC를 해당 디렉터리로 지정합니다.
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter예시 스크립트 내용:
#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi변경 후 Apache를 재시작합니다:
systemctl restart apache2.servicewww.example2.com 용으로 info.php 파일을 생성합니다:
vi /srv/www/web2/web/info.php파일 내용:
브라우저에서 http://www.example2.com/info.php 를 호출하면 Loaded Configuration File 항목이 /srv/www/web2/php.ini 로 표시되어야 합니다.

Note: PHPRC 환경변수는 php-cgi가 읽는 php.ini 경로를 지정합니다. PHPRC에 디렉터리 경로를 지정하면 그 디렉터리 내의 php.ini를 사용합니다.
단일 PHP 설정 항목만 변경하기
전체 php.ini 파일을 복사하지 않고, php-fcgi-starter 스크립트에서 PHP 실행에 -d 옵션을 추가해 개별 설정을 오버라이드할 수 있습니다. 예를 들어 www.example2.com에서 magic_quotes_gpc를 비활성화하려면 아래와 같이 합니다.
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter수정 예시:
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off변경 후 Apache 재시작:
systemctl restart apache2.service다시 http://www.example2.com/info.php 를 열고 magic_quotes_gpc 항목을 찾아보면 Off로 표시되어야 합니다.

링크
- mod_fcgid: http://fastcgi.coremail.cn/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- OpenSUSE: http://www.opensuse.org/
간단 SOP: 사이트별 PHP 설정 적용 순서
- 사이트 디렉터리에 php.ini를 준비하거나 기존 설정 유지 여부 결정.
- php-fcgi-starter 스크립트에서 PHPRC 또는 php-cgi -d 옵션을 설정.
- 파일/소유권 권한을 웹사이트 사용자로 설정(chown).
- Apache를 재시작(systemctl restart apache2.service).
- info.php로 Server API 및 Loaded Configuration File, 개별 설정 값을 확인.
- 테스트 완료 후 info.php를 제거하거나 접근 제어 적용.
테스트 / 수용 기준
- Server API가 CGI/FastCGI로 표시되어야 함.
- Loaded Configuration File 항목이 의도한 php.ini 경로를 가리켜야 함.
- -d로 변경한 개별 설정(예: magic_quotes_gpc)이 phpinfo에서 반영되어야 함.
- Apache 재시작 후 설정 변경이 유효해져야 함.
테스트 케이스 예:
- TC1: 새 php.ini 적용 확인 — 결과: Loaded Configuration File == /srv/www/web2/php.ini
- TC2: 단일 옵션 변경 확인 — 결과: magic_quotes_gpc == Off
문제 해결(트러블슈팅)
일반적인 원인과 해결책:
- 권한 문제: php.ini 파일과 상위 디렉터리의 소유자/권한 확인(chown, chmod).
- PHPRC 경로 오류: PHPRC에 디렉터리 경로가 올바른지, 끝에 슬래시 포함 여부 확인.
- php-cgi 실행파일 경로: exec에 지정한 /usr/bin/php-cgi 경로가 실제 존재하는지 확인(which php-cgi).
- 캐시/프로세스 문제: php-fcgi 자식 프로세스가 재시작되지 않으면 old config가 남아있을 수 있음. Apache 및 관련 fcgid 데몬을 완전 재시작.
- 로그 확인: Apache 에러 로그와 PHP-FPM/FCGID 로그를 확인합니다.
유용한 로그 커맨드 예:
tail -n 200 /var/log/apache2/error.log
journalctl -u apache2 -b --no-pager | tail -n 200문제가 계속되면 변경 전 상태로 롤백(backup에서 복원)하고 단계별로 재적용하여 어느 지점에서 문제가 발생하는지 좁혀갑니다.
체크리스트 (운영자 / 개발자 관점)
운영자:
- php-fcgi-starter 스크립트 백업
- php.ini 파일 소유자 및 권한 확인
- 서비스 재시작 후 로그 확인
- phpinfo 노출 여부 점검
개발자:
- 필요한 확장 모듈이 php.ini에 활성화돼 있는지 확인
- 사이트별 설정이 앱 동작에 미치는 영향 테스트
- 설정 변경 시 회귀 테스트 수행
치트 시트 (자주 쓰는 명령)
# 파일 복사 및 권한 변경
cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini
# starter 스크립트 편집
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
# Apache 재시작
systemctl restart apache2.service
# 로그 확인
tail -f /var/log/apache2/error.log용어 한줄 요약
- PHPRC: php-cgi가 읽을 php.ini가 위치한 디렉터리를 지정하는 환경변수.
- php.ini: PHP 런타임 설정 파일.
- php-cgi: CGI 방식으로 PHP를 실행하는 바이너리.
- phpinfo(): 현재 PHP 설정과 환경을 출력하는 디버그용 함수.
요약
- 각 사이트는 고유한 php.ini를 가질 수 있고, PHPRC로 경로를 지정하거나 php-cgi -d 옵션으로 개별 설정을 오버라이드할 수 있습니다.
- 변경 후에는 반드시 Apache를 재시작하고 info.php로 적용 여부를 확인하세요.
- 운영 환경에서는 phpinfo() 페이지 노출을 최소화하고 변경 전 백업을 권장합니다.
소셜 미리보기(제목/설명): PHP FastCGI: 사이트별 php.ini 설정과 테스트 — 각 사이트에 맞는 PHP 설정 적용 방법과 검증 절차를 제공합니다.
짧은 공지(100–200자): Apache + FastCGI 환경에서 사이트별로 php.ini를 적용하거나 -d 옵션으로 개별 설정을 바꾸는 방법을 배포 가이드 형태로 정리했습니다. 테스트 절차와 문제해결 체크리스트를 포함합니다.