Servidor Apache · 4 min read · Dec 03, 2025

Como Configurar Apache2 Com mod_fcgid E PHP5 No Mandriva 2009.1

Como Configurar Apache2 Com mod_fcgid E PHP5 No Mandriva 2009.1

Versão 1.0
Autor: Falko Timme
Siga-me no Twitter

Este tutorial descreve como você pode instalar Apache2 com mod_fcgid e PHP5 no Mandriva 2009.1. mod_fcgid é uma alternativa compatível ao antigo mod_fastcgi. Ele permite que você execute scripts PHP com as permissões de seus proprietários em vez do usuário Apache.

Não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Estou usando um servidor Mandriva 2009.1 neste tutorial com o nome do host server1.example.com e o endereço IP 192.168.0.100.

Vou criar dois vhosts Apache neste tutorial, www.example1.com e www.example2.com, para demonstrar o uso do mod_fcgid.

2 Instalando Apache2/mod_fcgi/PHP5

Primeiro, atualizamos nosso banco de dados de pacotes:

urpmi.update -a

Podemos instalar Apache2, mod_fcgid e PHP5 da seguinte forma (mod_fcgid requer apache-mpm-worker em vez de apache-mpm-prefork, então, se apache-mpm-prefork estiver atualmente instalado, os módulos do Apache que dependem dele serão removidos, como apache-mod_php):

urpmi apache-mpm-worker apache-mod_fcgid php-fcgi

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
Os seguintes pacotes devem ser removidos para que outros sejam atualizados:
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(devido a conflitos com apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(devido a conflitos com apache-mpm-worker[>= 2.2.8]) (y/N) <– y
Para satisfazer as dependências, os seguintes pacotes serão instalados:
Pacote Versão Lançamento Arquitetura
(médio “Atualizações Principais”)
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
(médio “Contrib”)
apache-mod_fcgid 2.2 6mdv2009.1 x86_64
6MB de espaço em disco será liberado.
977KB de pacotes serão recuperados.
Prosseguir com a instalação dos 7 pacotes? (Y/n) <– Y

Em seguida, abrimos /etc/php.ini…

vi /etc/php.ini

… e adicionamos a linha cgi.fix_pathinfo = 1 bem no final do arquivo:

| [...] cgi.fix_pathinfo = 1 |

Então reinicie o Apache:

/etc/init.d/httpd restart

3 Criando Vhosts Para www.example1.com E www.example2.com

Agora vou criar dois vhosts, www.example1.com (com o diretório raiz do documento /var/www/web1/web) e www.example2.com (com o diretório raiz do documento /var/www/web2/web). www.example1.com será de propriedade do usuário e grupo web1, e www.example2.com do usuário e grupo web2.

Primeiro, criamos os usuários e grupos:

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

Em seguida, criamos os diretórios raiz do documento e os tornamos de propriedade dos usuários/grupos web1 e 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/web

Executaremos o PHP usando suExec; o diretório raiz do documento do suExec é /var/www, como o seguinte comando mostra:

/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 ~]#

Portanto, não podemos chamar o binário PHP (/usr/bin/php-fcgi) diretamente porque está localizado fora do diretório raiz do documento do suExec. Como o suExec não permite symlinks, a única maneira de resolver o problema é criar um script wrapper para cada site em um subdiretório de /var/www; o script wrapper chamará então o binário PHP /usr/bin/php-fcgi. O script wrapper deve ser de propriedade do usuário e grupo de cada site, portanto, precisamos de um script wrapper para cada site. Vou criar os scripts wrapper em subdiretórios de /var/www/php-fcgi-scripts, por exemplo, /var/www/php-fcgi-scripts/web1 e /var/www/php-fcgi-scripts/web2.

mkdir -p /var/www/php-fcgi-scripts/web1  
mkdir -p /var/www/php-fcgi-scripts/web2
vi /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 |

A linha PHPRC contém o diretório onde o arquivo php.ini está localizado (ou seja, /etc/ se traduz em /etc/php.ini). PHP_FCGI_MAX_REQUESTS é o número máximo de solicitações antes que um processo fcgid seja interrompido e um novo seja iniciado. PHP_FCGI_CHILDREN define o número de filhos PHP que serão lançados.

Os scripts php-fcgi-starter devem ser executáveis, e eles (e os diretórios em que estão) devem ser de propriedade do usuário e grupo do site:

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

Agora criamos os vhosts Apache para www.example1.com e www.example2.com. Adicione os seguintes dois vhosts ao final de /etc/httpd/conf/httpd.conf:

vi /etc/httpd/conf/httpd.conf

| [...] NameVirtualHost *:80 ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /var/www/web1/web/ SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 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 ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /var/www/web2/web/ SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web2/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 |

Certifique-se de preencher os caminhos corretos (e o usuário e grupo corretos nas linhas SuexecUserGroup).

Recarregue o Apache em seguida:

/etc/init.d/httpd reload
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.