Configurando o Apache 2.2 + FastCGI + SuExec + PHP-FPM no Centos 6

2

Estou tentando seguir este instruções muito detalhadas aqui , eu simplesmente mudei de usuário de dados de www para usuário de apache e está usando / var / www / hosts / sitename / public_html em vez de / home / user / public_html

No entanto, passei o dia inteiro tentando descobrir por que o conteúdo do arquivo php é exibido sem ser analisado corretamente. Eu só não consigo descobrir isso. Abaixo está minha configuração atual:

/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. Além disso, com PHP5.5, eu preciso mesmo do FPM ou já está incluído? 2. Estou usando o mod_fastcgi, não tenho certeza se esse é o problema e devo mudar para o mod_fcgid? Parece haver registros conflitantes na internet, considerando qual é o melhor. Eu tenho muitos hosts virtuais em execução na máquina e espero poder fornecer a cada usuário seu próprio opcache

    
por mr1031011 31.10.2013 / 18:06

1 resposta

6

Primeiro de tudo, você está exagerando.

Você não precisa do suphp + php-fpm, pois eles basicamente fazem a mesma coisa.

Se você quiser um ambiente multi-vhost multi-usuário, você deve usar a seguinte pilha:

apache + mod_fastcgi + php-fpm

O php-fpm permite que você defina pools que podem rodar sob diferentes usuários com configurações php totalmente diferentes.

Para essa configuração, você precisaria reverter o apache para sua configuração básica:

user apache
group apache

Suponho que você executará seus vhosts na pasta public_html de seus usuários 'homedirs

Você precisará chmod / home /% user% to 755 e mudar de grupo para public_html para o apache

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

Em seguida, você definirá o pool php-fpm para o usuário

[%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

observe que este é um arquivo de exemplo, eu recomendo modificá-lo antes de usá-lo na máquina de produção

Depois de instalar e configurar o mod_fastcgi, você precisará adicionar um manipulador php especial para cada usuário, como este

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

E no seu arquivo 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>

O nome da sua ação e o nome do manipulador devem corresponder para funcionar.

Depois disso, cada usuário executa php com seu próprio nome.

Eu recomendo desabilitar todos os módulos desnecessários do apache para acelerar e desligar o SELinux se você não é proficiente em configurá-lo.

    
por 03.11.2013 / 00:42