
OpenSUSE 11.3에서 mod_fcgid 및 PHP5로 Apache2를 설정하는 방법
이 자습서에서는 OpenSUSE 11.3에서 mod_fcgid 및 PHP5를 사용하여 Apache2를 설치하는 방법을 설명합니다. mod_fcgid는 이전 mod_fastcgi와 호환되는 대안입니다. Apache 사용자 대신 소유자의 권한으로 PHP 스크립트를 실행할 수 있습니다.
이 튜토리얼에서는 호스트 이름이 server1.example.com이고 IP 주소가 192.168.0.100인 OpenSUSE 11.3 서버를 사용하고 있습니다.
이 튜토리얼에서는 mod_fcgid의 사용법을 보여주기 위해 www.example1.com과 www.example2.com이라는 두 개의 Apache 가상 호스트를 만들 것입니다.
다음과 같이 Apache2, mod_fcgid 및 PHP5를 설치할 수 있습니다.
그런 다음 Apache를 다시 시작합니다.
이제 www.example1.com(문서 루트/srv/www/web1/web 포함) 및 www.example2.com(문서 루트/srv/www/web2/web 포함)의 두 가상 호스트를 생성하겠습니다. www.example1.com은 사용자 및 그룹 web1이 소유하고 www.example2.com은 사용자 및 그룹 web2가 소유합니다.
먼저 사용자와 그룹을 만듭니다.
PHPRC 라인에는 php.ini 파일이 있는 디렉토리가 포함됩니다(예:/etc/php5/fastcgi/는/etc/php5/fastcgi/php.ini로 변환됨). PHP_FCGI_MAX_REQUESTS는 fcgid 프로세스가 중지되고 새 프로세스가 시작되기 전의 최대 요청 수입니다. PHP_FCGI_CHILDREN은 시작될 PHP 자식의 수를 정의합니다.
php-fcgi-starter 스크립트는 실행 가능해야 하며 웹 사이트의 사용자 및 그룹이 스크립트(및 스크립트가 있는 디렉토리)를 소유해야 합니다.
올바른 경로(및 SuexecUserGroup 행의 올바른 사용자 및 그룹)를 입력했는지 확인하십시오.
/etc/apache2/httpd.conf를 열고 Include/etc/apache2/vhosts.d/*.conf 줄 앞에 NameVirtualHost * 줄을 추가합니다(그렇지 않으면 첫 번째 가상 호스트만 작동함).
Apache를 다시 시작하기 전에 suExec 실행 파일의 권한을 변경합니다(그렇지 않으면 Apache를 다시 시작할 때 다음 경고가 표시됩니다. 경고: SuexecUserGroup 지시문에는 SUEXEC 래퍼가 필요합니다.):
1 서문
이 튜토리얼에서는 호스트 이름이 server1.example.com이고 IP 주소가 192.168.0.100인 OpenSUSE 11.3 서버를 사용하고 있습니다.
이 튜토리얼에서는 mod_fcgid의 사용법을 보여주기 위해 www.example1.com과 www.example2.com이라는 두 개의 Apache 가상 호스트를 만들 것입니다.
2 Apache2/mod_fcgi/PHP5 설치
다음과 같이 Apache2, mod_fcgid 및 PHP5를 설치할 수 있습니다.
yast2 -i apache2 apache2-mod_fcgid php5-fastcgiApache2가 이미 Apache 모듈로 PHP5와 함께 설치된 경우 지금 PHP5 모듈을 비활성화합니다.
a2dismod php5다음으로 suexec 및 fcgid 모듈을 활성화합니다.
a2enmod suexec그런 다음 Apache용 시스템 시작 링크를 만들고 시작합니다.
a2enmod fcgid
chkconfig --add apache2다음으로/etc/php5/fastcgi/php.ini...를 엽니다.
/etc/init.d/apache2 start
vi /etc/php5/fastcgi/php.ini... 그리고 cgi.fix_pathinfo = 1 행의 주석 처리를 제거합니다.
[...] ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=1 [...]
그런 다음 Apache를 다시 시작합니다.
/etc/init.d/apache2 restart
3 www.example1.com 및 www.example2.com용 가상 호스트 만들기
이제 www.example1.com(문서 루트/srv/www/web1/web 포함) 및 www.example2.com(문서 루트/srv/www/web2/web 포함)의 두 가상 호스트를 생성하겠습니다. www.example1.com은 사용자 및 그룹 web1이 소유하고 www.example2.com은 사용자 및 그룹 web2가 소유합니다.
먼저 사용자와 그룹을 만듭니다.
groupadd web1그런 다음 문서 루트를 만들고 사용자/그룹 web1 resp가 소유하도록 만듭니다. 웹2:
groupadd web2
useradd -s /bin/false -d /srv/www/web1 -m -g web1 web1
useradd -s /bin/false -d /srv/www/web2 -m -g web2 web2
chmod 755 /srv/www/web1
chmod 755 /srv/www/web2
mkdir -p /srv/www/web1/web우리는 suExec을 사용하여 PHP를 실행할 것입니다. suExec의 문서 루트는 다음 명령과 같이/srv/www입니다.
chown web1:web1 /srv/www/web1/web
mkdir -p /srv/www/web2/web
chown web2:web2 /srv/www/web2/web
/usr/sbin/suexec2 -V
server1:~ # /usr/sbin/suexec2 -V따라서 PHP 바이너리(/usr/bin/php-cgi)는 suExec의 문서 루트 외부에 있기 때문에 직접 호출할 수 없습니다. suExec은 심볼릭 링크를 허용하지 않기 때문에 문제를 해결하는 유일한 방법은/srv/www의 하위 디렉토리에 각 웹 사이트에 대한 래퍼 스크립트를 만드는 것입니다. 래퍼 스크립트는 PHP 바이너리/usr/bin/php-cgi를 호출합니다. 래퍼 스크립트는 각 웹 사이트의 사용자 및 그룹이 소유해야 하므로 각 웹 사이트에 대해 하나의 래퍼 스크립트가 필요합니다./srv/www/php-fcgi-scripts의 하위 디렉토리에 래퍼 스크립트를 생성하겠습니다./srv/www/php-fcgi-scripts/web1 및/srv/www/php-fcgi-scripts/web2.
-D AP_DOC_ROOT="/srv/www"
-D AP_GID_MIN=96
-D AP_HTTPD_USER="wwwrun"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=96
-D AP_USERDIR_SUFFIX="public_html"
server1:~ #
mkdir -p /srv/www/php-fcgi-scripts/web1
mkdir -p /srv/www/php-fcgi-scripts/web2
vi /srv/www/php-fcgi-scripts/web1/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
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
PHPRC 라인에는 php.ini 파일이 있는 디렉토리가 포함됩니다(예:/etc/php5/fastcgi/는/etc/php5/fastcgi/php.ini로 변환됨). PHP_FCGI_MAX_REQUESTS는 fcgid 프로세스가 중지되고 새 프로세스가 시작되기 전의 최대 요청 수입니다. PHP_FCGI_CHILDREN은 시작될 PHP 자식의 수를 정의합니다.
php-fcgi-starter 스크립트는 실행 가능해야 하며 웹 사이트의 사용자 및 그룹이 스크립트(및 스크립트가 있는 디렉토리)를 소유해야 합니다.
chmod 755 /srv/www/php-fcgi-scripts/web1/php-fcgi-starter이제 www.example1.com 및 www.example2.com에 대한 Apache 가상 호스트를 생성합니다.
chmod 755 /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /srv/www/php-fcgi-scripts/web1
chown -R web2:web2 /srv/www/php-fcgi-scripts/web2
vi /etc/apache2/vhosts.d/www.example1.com.conf
<VirtualHost *> ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /srv/www/web1/web/ <IfModule mod_fcgid.c> SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 <Directory /srv/www/web1/web/> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all </Directory> </IfModule> # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost>
vi /etc/apache2/vhosts.d/www.example2.com.conf
<VirtualHost *> ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /srv/www/web2/web/ <IfModule mod_fcgid.c> SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 <Directory /srv/www/web2/web/> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all </Directory> </IfModule> # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost>
올바른 경로(및 SuexecUserGroup 행의 올바른 사용자 및 그룹)를 입력했는지 확인하십시오.
/etc/apache2/httpd.conf를 열고 Include/etc/apache2/vhosts.d/*.conf 줄 앞에 NameVirtualHost * 줄을 추가합니다(그렇지 않으면 첫 번째 가상 호스트만 작동함).
vi /etc/apache2/httpd.conf
[...] ### Virtual server configuration ############################################ # # VirtualHost: If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs-2.2/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # NameVirtualHost * Include /etc/apache2/vhosts.d/*.conf [...]
Apache를 다시 시작하기 전에 suExec 실행 파일의 권한을 변경합니다(그렇지 않으면 Apache를 다시 시작할 때 다음 경고가 표시됩니다. 경고: SuexecUserGroup 지시문에는 SUEXEC 래퍼가 필요합니다.):
chmod 4755 /usr/sbin/suexec2나중에 Apache를 다시 시작하십시오.
/etc/init.d/apache2 restart