기술 가이드

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

4 min read 서버·운영 업데이트됨 21 Oct 2025
PHP FastCGI: 사이트별 php.ini 설정 및 테스트
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”가 표시되어야 합니다.

phpinfo 출력: 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.service

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

phpinfo 출력: 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로 표시되어야 합니다.

phpinfo 출력: magic_quotes_gpc가 Off로 표시된 스크린샷

링크

간단 SOP: 사이트별 PHP 설정 적용 순서

  1. 사이트 디렉터리에 php.ini를 준비하거나 기존 설정 유지 여부 결정.
  2. php-fcgi-starter 스크립트에서 PHPRC 또는 php-cgi -d 옵션을 설정.
  3. 파일/소유권 권한을 웹사이트 사용자로 설정(chown).
  4. Apache를 재시작(systemctl restart apache2.service).
  5. info.php로 Server API 및 Loaded Configuration File, 개별 설정 값을 확인.
  6. 테스트 완료 후 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 옵션으로 개별 설정을 바꾸는 방법을 배포 가이드 형태로 정리했습니다. 테스트 절차와 문제해결 체크리스트를 포함합니다.

공유하기: 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로 원격 네트워크 폴더 연결하기