서버 설정 · 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 restart3 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/webPHP를 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/web2vi /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 |
SuexecUserGroup 줄의 올바른 경로(및 올바른 사용자 및 그룹)를 입력했는지 확인하십시오.
그 후 Apache를 다시 로드합니다:
/etc/init.d/httpd reload새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.