기술 가이드

PHP-FastCGI: 사이트별 php.ini 설정과 테스트 가이드

4 min read 웹서버 업데이트됨 27 Sep 2025
사이트별 php.ini 설정 및 PHP FastCGI 테스트
사이트별 php.ini 설정 및 PHP FastCGI 테스트

개요

이 문서는 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에서 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.ini

php-fcgi-starter 스크립트 열기:

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

PHPRC 변수를 사이트 디렉터리로 설정합니다:

#!/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 로 표시되어야 합니다.

phpinfo에서 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에서 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 등)를 비활성화하는 것을 고려하세요.

간단 가이드(단계별 요약)

  1. 사이트별 php.ini가 필요하면 /var/www//php.ini를 생성하고 소유권을 설정합니다.
  2. /var/www/php-fcgi-scripts//php-fcgi-starter에서 PHPRC를 사이트 디렉터리로 설정하거나 exec에 -d 옵션을 추가합니다.
  3. Apache를 reload 또는 restart합니다.
  4. 브라우저에서 info.php를 열어 변경이 반영되었는지 확인합니다.

1줄 용어집

  • phpinfo(): PHP 환경과 설정을 HTML로 출력하는 함수입니다.
  • PHPRC: PHP가 참조할 php.ini 파일의 디렉터리 경로를 지정하는 환경변수입니다.

요약

이 가이드는 FastCGI 환경에서 사이트별로 php.ini를 적용하거나 단일 설정을 바꾸는 방법을 다룹니다. PHPRC 환경변수와 PHP의 -d 옵션을 활용하면 사이트별 맞춤 구성이 가능하며, phpinfo()로 변경사항을 빠르게 검증할 수 있습니다.

참고 링크

저자 정보

Falko Timme는 Timme Hosting의 소유자이며 HowtoForge의 주요 유지관리자입니다. 그는 ISPConfig 핵심 개발자 중 한 명으로 다양한 리눅스 시스템 및 웹호스팅 관련 기여를 해왔습니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기