Tutorial: Apache2 (worker) + mod_fcgid + php5

Styczeń 31st, 2011 by Sławek

W tym tutorialu znajdziecie instrukcję oraz wskazówki pomocne podczas instalowania apache z obsługą PHP.  Różnica naszej instalacji w porównaniu ze standardową instalacją Apache+PHP polega na tym iż skrypty PHP są wykonywane z uprawnieniami użytkownika a nie jak ma to miejsce w standardowej instalacji,  z uprawnieniami apache.  Kolejna różnicą w porównaniu do standardowych konfiguracji jest fakt, iż sam apache będzie pracował nie jako prefork tylko worker.Cały instalacja zostanie przeprowadzona w środowisku Fedora 13.

Pierwszym krokiem będzie zainstalowanie serwera apche wraz modułem mod_fcgid oraz interpertera PHP

yum install httpd mod_fcgid php-cli

Następnie musimy wyłączyć standardową obsługę skryptów php. W tym celu edytujemy plik /etc/httpd/conf.d/php.conf

vim /etc/httpd/conf.d/php.conf

Aby wyłączyć obsługę php, musimy wykomentować wszystkie linie w edytowanym pliku. Plik po modyfikacjach ma wyglądać tak

# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
#
#  LoadModule php5_module modules/libphp5.so
#
#
#  LoadModule php5_module modules/libphp5-zts.so
#
 
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
 
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
#DirectoryIndex index.php
 
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

Następny, krokiem będzie ustawienie automatycznego startu Apache oraz jego zrestartowanie, robimy to wpisując :

chkconfig --levels 235 httpd on
/etc/init.d/httpd restart

Kolejnym krokiem będzie wyedytowanie pliku..

 vim /etc/php.ini

…..i od komentowanie w nim linijki :

; 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://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1

Następną zmianę musimy przeprowadzić w pliku :

vim /etc/httpd/conf.d/fcgid.conf

Na końcu którego musimy dodać :

PHP_Fix_Pathinfo_Enable 1
MaxRequestsPerProcess       1000
MaxProcessCount             50
IPCCommTimeout              240
IdleTimeout                 240

Następnie musimy przełączyć nasz serwer Apache, aby pracował jako worker, wtym celu edytujemy :

vim /etc/sysconfig/httpd

I odkomentowywujemy linijke HTTPD=/usr/sbin/httpd.worker :

# Configuration file for the httpd service.
 
#
# The default processing model (MPM) is the process-based
# 'prefork' model.  A thread-based model, 'worker', is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
HTTPD=/usr/sbin/httpd.worker
 
#
# To pass additional options (for instance, -D definitions) to the
# httpd binary at startup, set OPTIONS here.
#
#OPTIONS=
 
#
# By default, the httpd process is started in the C locale; to
# change the locale in which the server runs, the HTTPD_LANG
# variable can be set.
#
#HTTPD_LANG=C

I restartujemy nasz serwer, poleceniem :

/etc/init.d/httpd restart

Teraz jak już mamy skonfigurowany serwer, możemy przejść do utworzenia vhosta który będzie pracował z prawami usera.
W tym celu musimy dodać nowego użytkownika:

groupadd web1
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
chmod 755 /var/www/web1
mkdir -p /var/www/web1/web
chown web1:web1 /var/www/web1/web

Teraz w domyślnym katalogu suExec czyli /var/www musimy utworzyć skrypt, który będzie nam wywoływał interpreter PHP.
Najpierw musimy utworzyć katalog

mkdir -p /var/www/php-fcgi-scripts/web1

Następnie w nim tworzymy plik wrappera :

vim /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=1
exec /usr/bin/php-cgi

Aby to zadziałało musimy zmienić właściciela na naszego nowo utworzonego użytkownika i pozwolić aby nasz nowy plik był wykonywalny:

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

Teraz możemy przejść do właściwej edycji naszego vhost-a :

vim /etc/httpd/conf/httpd.conf

Na końcu pliku wstawiamy taki wpis :

NameVirtualHost *:80
 
  ServerName www.domena.pl
  ServerAlias domena.pl
  ServerAdmin admin@domena.pl
  DocumentRoot /var/www/web1/web/
 
    SuexecUserGroup web1 web1
 
      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

Po zapisaniu zmian, możemy przeładować nasz serwer

/etc/init.d/httpd restart

Jeśli wszystko przebiegło bez zakłóceń, i do tutka nie wkradł się żaden błąd to powinniśmy mieć działający serwer www.

Article Global Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google StumbleUpon Eli Pets

Zostaw komentarz

*