서버 설정 · 3 min read · Dec 03, 2025

Mandriva 2009.1에서 mod_fcgid 및 PHP5와 함께 Apache2 설정하는 방법

Mandriva 2009.1에서 mod_fcgid 및 PHP5와 함께 Apache2 설정하는 방법

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

이 튜토리얼에서는 Mandriva 2009.1에서 mod_fcgid 및 PHP5와 함께 Apache2를 설치하는 방법을 설명합니다. mod_fcgid는 구형 mod_fastcgi의 호환 가능한 대안입니다. 이를 통해 Apache 사용자 대신 소유자의 권한으로 PHP 스크립트를 실행할 수 있습니다.

이것이 당신에게 작동할 것이라는 보장은 하지 않습니다!

1 사전 참고

이 튜토리얼에서는 호스트 이름이 server1.example.com이고 IP 주소가 192.168.0.100인 Mandriva 2009.1 서버를 사용합니다.

이 튜토리얼에서는 mod_fcgid의 사용을 보여주기 위해 www.example1.com과 www.example2.com이라는 두 개의 Apache vhosts를 생성할 것입니다.

2 Apache2/mod_fcgi/PHP5 설치하기

먼저 패키지 데이터베이스를 업데이트합니다:

urpmi.update -a

다음과 같이 Apache2, mod_fcgid 및 PHP5를 설치할 수 있습니다 (mod_fcgid는 apache-mpm-prefork 대신 apache-mpm-worker가 필요하므로, 현재 apache-mpm-prefork가 설치되어 있다면, 이에 의존하는 Apache 모듈이 제거됩니다, 예: apache-mod_php):

urpmi apache-mpm-worker apache-mod_fcgid php-fcgi

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
다음 패키지를 제거해야 다른 패키지를 업그레이드할 수 있습니다:
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64와의 충돌로 인해)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(apache-mpm-worker[>= 2.2.8]와의 충돌로 인해) (y/N) <– y
종속성을 충족하기 위해 다음 패키지가 설치될 것입니다:
패키지 버전 릴리스 아키
(중간 “주요 업데이트”)
apache-base 2.2.11 10.5mdv2009.1 x86_64
apache-mod_ssl 2.2.11 10.5mdv2009.1 x86_64
apache-modules 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-prefork 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-worker 2.2.11 10.5mdv2009.1 x86_64
php-fcgi 5.2.9 6.2mdv2009.1 x86_64
(중간 “기여”)
apache-mod_fcgid 2.2 6mdv2009.1 x86_64
6MB의 디스크 공간이 해제됩니다.
977KB의 패키지가 검색됩니다.
7개의 패키지 설치를 진행하시겠습니까? (Y/n) <– Y

다음으로 /etc/php.ini를 엽니다…

vi /etc/php.ini

… 그리고 파일의 끝에 cgi.fix_pathinfo = 1이라는 줄을 추가합니다:

| [...] cgi.fix_pathinfo = 1 |

그런 다음 Apache를 재시작합니다:

/etc/init.d/httpd restart

3 www.example1.com 및 www.example2.com에 대한 Vhosts 생성하기

이제 www.example1.com (문서 루트가 /var/www/web1/web)과 www.example2.com (문서 루트가 /var/www/web2/web)이라는 두 개의 vhosts를 생성하겠습니다. www.example1.com은 사용자 및 그룹 web1이 소유하고, www.example2.com은 사용자 및 그룹 web2가 소유합니다.

먼저 사용자와 그룹을 생성합니다:

groupadd web1  
groupadd web2  
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1  
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2  
chmod 755 /var/www/web1  
chmod 755 /var/www/web2

그런 다음 문서 루트를 생성하고 이를 사용자/그룹 web1 및 web2가 소유하도록 설정합니다:

mkdir -p /var/www/web1/web  
chown web1:web1 /var/www/web1/web  
mkdir -p /var/www/web2/web  
chown web2:web2 /var/www/web2/web

PHP를 suExec를 사용하여 실행할 것입니다; suExec의 문서 루트는 /var/www이며, 다음 명령어가 이를 보여줍니다:

/usr/sbin/suexec -V
[root@server1 ~]# /usr/sbin/suexec -V  
 -D AP_DOC_ROOT="/var/www"  
 -D AP_GID_MIN=100  
 -D AP_HTTPD_USER="apache"  
 -D AP_LOG_EXEC="/var/log/httpd/suexec_log"  
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"  
 -D AP_SUEXEC_UMASK=077  
 -D AP_UID_MIN=100  
 -D AP_USERDIR_SUFFIX="public_html"  
[root@server1 ~]#

따라서 PHP 바이너리 (/usr/bin/php-fcgi)를 직접 호출할 수 없습니다. 이는 suExec의 문서 루트 외부에 위치하기 때문입니다. suExec는 심볼릭 링크를 허용하지 않으므로, 문제를 해결하는 유일한 방법은 /var/www의 하위 디렉토리에 각 웹 사이트에 대한 래퍼 스크립트를 생성하는 것입니다. 래퍼 스크립트는 PHP 바이너리 /usr/bin/php-fcgi를 호출합니다. 래퍼 스크립트는 각 웹 사이트의 사용자 및 그룹이 소유해야 하므로, 각 웹 사이트에 대해 하나의 래퍼 스크립트를 만들어야 합니다. 저는 /var/www/php-fcgi-scripts의 하위 디렉토리에 래퍼 스크립트를 생성할 것입니다, 예: /var/www/php-fcgi-scripts/web1 및 /var/www/php-fcgi-scripts/web2.

mkdir -p /var/www/php-fcgi-scripts/web1  
mkdir -p /var/www/php-fcgi-scripts/web2
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

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

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

PHPRC 줄에는 php.ini 파일이 위치한 디렉토리(즉, /etc/는 /etc/php.ini로 변환됨)가 포함되어 있습니다. PHP_FCGI_MAX_REQUESTS는 fcgid 프로세스가 중지되고 새 프로세스가 시작되기 전의 최대 요청 수입니다. PHP_FCGI_CHILDREN은 시작될 PHP 자식의 수를 정의합니다.

php-fcgi-starter 스크립트는 실행 가능해야 하며, 이들(및 그들이 있는 디렉토리)은 웹 사이트의 사용자 및 그룹이 소유해야 합니다:

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter  
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter  
chown -R web1:web1 /var/www/php-fcgi-scripts/web1  
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

이제 www.example1.com 및 www.example2.com에 대한 Apache vhosts를 생성합니다. /etc/httpd/conf/httpd.conf의 끝에 다음 두 개의 vhosts를 추가합니다:

vi /etc/httpd/conf/httpd.conf

| [...] NameVirtualHost *:80 ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /var/www/web1/web/ SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /var/www/web2/web/ SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off |

SuexecUserGroup 줄의 올바른 경로(및 올바른 사용자 및 그룹)를 입력했는지 확인하십시오.

그 후 Apache를 다시 로드합니다:

/etc/init.d/httpd reload
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.