3 votes

Installation d'Apache 2.2 + FastCGI + SuExec + PHP-FPM sur Centos 6

J'essaie de suivre ce qui suit instructions très détaillées ici Je suis simplement passé de l'utilisateur www-data à l'utilisateur apache, et utilise /var/www/hosts/sitename/public_html au lieu de /home/user/public_html.

Cependant, j'ai passé toute la journée à essayer de comprendre pourquoi le contenu du fichier php est affiché sans être analysé correctement. Je n'arrive pas à comprendre. Voici ma configuration actuelle :

/etc/httpd/conf.d/fastcgi.conf

User apache
Group apache

LoadModule fastcgi_module modules/mod_fastcgi.so

# dir for IPC socket files
FastCgiIpcDir /var/run/mod_fastcgi

# wrap all fastcgi script calls in suexec
FastCgiWrapper On

# global FastCgiConfig can be overridden by FastCgiServer options in vhost config
FastCgiConfig -idle-timeout 20 -maxClassProcesses 1

# sample PHP config
# see /usr/share/doc/mod_fastcgi-2.4.6 for php-wrapper script
# don't forget to disable mod_php in /etc/httpd/conf.d/php.conf!
#
# to enable privilege separation, add a "SuexecUserGroup" directive
# and chown the php-wrapper script and parent directory accordingly
# see also http://www.brandonturner.net/blog/2009/07/fastcgi_with_php_opcode_cache/
#
FastCgiServer /var/www/www-data/php5-fcgi
#AddType application/x-httpd-php .php

AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php5-fcgi

Alias /fcgi-bin/ /var/www/www-data/

#FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /tmp/php5-fpm.sock -pass-header Authorization
#DirectoryIndex index.php
#
<Location /fcgi-bin/>
#    Order Deny,Allow
#    Deny from All
#    Allow from env=REDIRECT_STATUS
    SetHandler fcgid-script
    Options +ExecCGI
</Location>

/etc/httpd/conf.d/vhost.conf

<VirtualHost>
                DirectoryIndex index.php index.html index.shtml index.cgi

                SuexecUserGroup www.mysite.com mygroup

                Alias /fcgi-bin/ /var/www/www-data/www.mysite.com/
                DocumentRoot /var/www/hosts/mysite.com/w/w/w/www/

                <Directory /var/www/hosts/mysite.com/w/w/w/www/>
                        Options -Indexes FollowSymLinks                        
                        AllowOverride None
                        Order allow,deny
                        allow from all
                </Directory>
</VirtualHost>

PS : 1. Aussi, avec PHP5.5, ai-je besoin de FPM ou est-il déjà inclus ? 2. J'utilise mod_fastcgi, je ne sais pas si c'est le problème et si je devrais passer à mod_fcgid ? Je ne sais pas si c'est un problème et si je dois passer à mod_fcgid. J'ai plusieurs hôtes virtuels qui tournent sur la machine et j'espère pouvoir fournir à chaque utilisateur son propre opcache.

8voto

Sibin Grasic Points 466

Tout d'abord, vous en faites trop.

Vous n'avez pas besoin de suphp + php-fpm puisqu'ils font essentiellement la même chose.

Si vous souhaitez un environnement multi-utilisateurs et multi-hôtes, vous devez utiliser la pile suivante :

apache+mod_fastcgi+php-fpm

php-fpm vous permet de définir des pools qui peuvent fonctionner sous différents utilisateurs avec des paramètres php totalement différents.

Pour cette configuration, il faut revenir à la configuration de base d'Apache :

user apache
group apache

Je suppose que vous ferez fonctionner vos serveurs virtuels dans le dossier public_html du répertoire personnel de vos utilisateurs.

Vous devrez chmoder /home/%user% en 755 et changer le groupe pour public_html en apache.

chown %user%:apache /home/%user%/public_html
chomod 755 /home/%user%

Ensuite, vous définirez le pool php-fpm pour l'utilisateur

[%user%]

listen = /var/run/php-fpm/%user%.socket
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = web
listen.group = www
listen.mode = 0666

user = %user%
group = %userg%

#pm.status_path = /fpm-status
pm = ondemand
pm.max_children = 20
#pm.start_servers = 6
#pm.min_spare_servers = 5
#pm.max_spare_servers = 10
pm.max_requests = 500
request_terminate_timeout = 600s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes

php_admin_value[error_log] = /home/%user%/fpm-error.log
php_flag[display_errors] = on
php_flag[display_startup_errors] = on
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M
php_value[session.save_handler] = files
php_value[session.save_path] = /tmp

Notez qu'il s'agit d'un fichier d'exemple, je recommande de le modifier avant de l'utiliser sur une machine de production.

Après avoir installé et configuré mod_fastcgi, vous devrez ajouter un gestionnaire php spécial pour chaque utilisateur, comme ceci

nano /etc/httpd/conf.d/php-fpm.conf

Action fcgi-php-fpm /fcgi-php-fpm virtual
Alias /fcgi-php-fpm /fcgi-php-fpm
FastCgiExternalServer /fcgi-php-fpm -socket /var/run/php-fpm/web.socket -pass-header Authorization -idle-timeout 180

Et dans votre fichier vhost

<VirtualHost *:80>

 ServerName beforeafter.local
 ServerAlias www.beforeafter.local
 DocumentRoot /home/web/public_html/before
 DirectoryIndex index.htm index.html index.php
 ErrorLog  /home/web/ba.error.log
 CustomLog /home/web/ba.access.log combined
 UseCanonicalName Off

 Options FollowSymlinks +Indexes
 RewriteEngine On

 AddType text/html .php
 AddHandler fcgi-php-fpm .php

 <Directory />
  AllowOverride All
 </Directory>
</VirtualHost>

Le nom de l'action et le nom du gestionnaire doivent correspondre pour fonctionner.

Ensuite, chaque utilisateur exécute php sous son propre nom.

Je recommande de désactiver tous les modules apache inutiles afin de l'accélérer et de désactiver SELinux si vous n'êtes pas compétent pour le configurer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X