PHP-FastCGI: 사이트별 php.ini 설정과 테스트 가이드
개요
이 문서는 Apache와 PHP를 FastCGI(CGI)로 동작시킬 때 각 웹사이트별로 다른 php.ini를 적용하거나, 특정 PHP 설정만 개별 사이트에서 변경하는 방법을 설명합니다. 또한 테스트 방법, 문제 해결 팁과 운영자용 체크리스트, 보안 권장사항을 제공합니다.
중요 용어 한 줄 정의:
- PHPRC: PHP가 사용할 php.ini 디렉터리 또는 파일을 지정하는 환경변수입니다.
1. 테스트 파일 만들기
먼저 간단한 phpinfo() 페이지를 만들어 PHP가 CGI/FastCGI로 동작하는지 확인합니다.
다음과 같이 파일을 생성하세요:
vi /var/www/web1/web/info.php파일 내용:
그 후 브라우저에서 http://www.example1.com/info.php 를 호출합니다. 출력 화면의 Server API 라인에 “CGI/FastCGI”가 표시되어야 합니다.

중요: 외부에 노출된 phpinfo() 페이지는 민감한 정보를 보여줄 수 있으므로 테스트 후 삭제하거나 접근을 제한하세요.
2. 사이트별 php.ini 사용하기
각 웹사이트에 대해 별도의 php-fcgi-starter 래퍼 스크립트를 쓰고 있다면, PHPRC 환경변수로 사이트 전용 php.ini를 지정할 수 있습니다.
예시: 기본 php.ini를 복사하여 example2 사이트 전용으로 만들기
cp /etc/php5/cgi/php.ini /var/www/web2/
chown web2:web2 /var/www/web2/php.iniphp-fcgi-starter 스크립트 열기:
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starterPHPRC 변수를 사이트 디렉터리로 설정합니다:
#!/bin/sh
PHPRC=/var/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php설정을 반영하려면 Apache를 재로딩합니다:
/etc/init.d/apache2 reload사이트별로 info.php를 생성해 다시 확인하세요:
vi /var/www/web2/web/info.php내용은 앞과 동일한 phpinfo() 파일입니다. 브라우저에서 http://www.example2.com/info.php 를 열면 Loaded Configuration File 항목이 /var/www/web2/php.ini 로 표시되어야 합니다.

참고: PHPRC에 디렉터리를 지정하면 PHP는 해당 디렉터리에서 php.ini 파일을 찾습니다.
3. 단일 PHP 설정만 바꾸기
전체 php.ini를 복사하지 않고, 특정 설정 하나만 바꾸고 싶다면 php 실행 시 -d 옵션을 사용합니다. 래퍼 스크립트의 exec 라인에 추가하세요.
예: magic_quotes_gpc를 끄기
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -d magic_quotes_gpc=off변경 후 Apache 재로딩:
/etc/init.d/apache2 reload브라우저에서 info.php를 다시 열고 magic_quotes_gpc 항목이 Off 로 바뀌었는지 확인합니다.

문제 해결 팁
- phpinfo() 페이지가 보이지 않거나 오류가 날 경우
- Apache 에러 로그(/var/log/apache2/error.log 등)를 확인하세요.
- 래퍼 스크립트의 권한과 소유자가 정확한지 확인하세요 (웹사이트 사용자 소유 권장).
- PHPRC 경로가 올바른지, 해당 디렉터리에 php.ini가 존재하는지 확인하세요.
- 설정이 반영되지 않을 경우
- Apache를 reload가 아닌 restart해 보세요. 일부 환경에서는 풀된 프로세스가 남아 변경이 반영되지 않을 수 있습니다.
- 보안 관련
- 테스트용 phpinfo()는 외부 공개를 피하십시오. 운영 사이트에서는 접근 제어나 삭제를 적용하세요.
언제 이 방법이 맞지 않는가
- 시스템에 PHP-FPM이 이미 사용 중이면 해당 방법 대신 pool 단위로 php.ini 옵션을 관리하는 것이 더 적절합니다.
- 매우 높은 트래픽 환경에서는 CGI 방식보다 php-fpm이나 mod_php가 성능/메모리 측면에서 유리할 수 있습니다.
대안 접근 방식
- PHP-FPM: 프로세스 풀별로 php.ini와 포트/소켓을 분리해 더 세밀한 리소스 제어 가능.
- mod_php: Apache 모듈로 동작, 설정이 간단하지만 프로세스 메모리 공유로 호스팅 다수 사이트에 비효율적일 수 있음.
운영자용 체크리스트
- 각 사이트에 맞는 php.ini 또는 -d 옵션을 정의했는가?
- 래퍼 스크립트 권한과 소유자를 확인했는가?
- Apache 재로딩 또는 재시작으로 변경을 반영했는가?
- phpinfo()로 Server API와 Loaded Configuration File을 확인했는가?
- 테스트 후 info.php 파일을 삭제하거나 접근을 제한했는가?
Критерии приёмки
- info.php에서 Server API가 “CGI/FastCGI”로 표시된다.
- Loaded Configuration File이 의도한 경로(/var/www/
/php.ini)를 가리킨다. - 개별 -d 옵션으로 설정한 값이 phpinfo()에 반영된다.
보안 권장사항
- phpinfo() 페이지는 테스트용으로만 사용하고, 운영 환경에선 삭제하거나 접근을 IP/인증으로 제한하세요.
- 웹사이트별로 php.ini를 분리할 때 파일 권한은 최소 권한 원칙(예: 640)으로 설정하고, 소유자는 해당 사이트 운영 사용자로 지정하세요.
- 불필요한 PHP 확장이나 함수(exec/system 등)를 비활성화하는 것을 고려하세요.
간단 가이드(단계별 요약)
- 사이트별 php.ini가 필요하면 /var/www/
/php.ini를 생성하고 소유권을 설정합니다. - /var/www/php-fcgi-scripts/
/php-fcgi-starter에서 PHPRC를 사이트 디렉터리로 설정하거나 exec에 -d 옵션을 추가합니다. - Apache를 reload 또는 restart합니다.
- 브라우저에서 info.php를 열어 변경이 반영되었는지 확인합니다.
1줄 용어집
- phpinfo(): PHP 환경과 설정을 HTML로 출력하는 함수입니다.
- PHPRC: PHP가 참조할 php.ini 파일의 디렉터리 경로를 지정하는 환경변수입니다.
요약
이 가이드는 FastCGI 환경에서 사이트별로 php.ini를 적용하거나 단일 설정을 바꾸는 방법을 다룹니다. PHPRC 환경변수와 PHP의 -d 옵션을 활용하면 사이트별 맞춤 구성이 가능하며, phpinfo()로 변경사항을 빠르게 검증할 수 있습니다.
참고 링크
- mod_fcgid: http://httpd.apache.org/mod_fcgid/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- Debian: http://www.debian.org/
저자 정보
Falko Timme는 Timme Hosting의 소유자이며 HowtoForge의 주요 유지관리자입니다. 그는 ISPConfig 핵심 개발자 중 한 명으로 다양한 리눅스 시스템 및 웹호스팅 관련 기여를 해왔습니다.