Configurar Apache2 con mod_fcgid y PHP5 en Fedora 11

Este artículo describe cómo puede instalar Apache 2 con mod_fcgid y PHP5 en Fedora 11. mod_fcgid es una vieja alternativa compatible con mod_fastcgi. Le permite ejecutar scripts PHP con los permisos de sus propietarios en lugar del usuario de Apache.

Tener en cuenta:

Se usa un servidor de Fedora 11 en este tutorial con la server1.example.com nombre de host y la dirección IP 192.168.0.100

Voy a crear dos vhosts Apache http://www.example1.com en este tutorial, y http://www.example2.com, para demostrar el uso de mod_fcgid.

Antes de empezar, asegúrese de que SELinux está inhabilitado.  Para esto abran  / etc / selinux / config …

vi /etc/selinux/config

Y desabiliten  SELinux.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted – Targeted processes are protected,
# mls – Multi Level Security protection.
SELINUXTYPE=targeted

Ahora corran: setenforce 0 para que el cambio surta efecto.

Paso 1: Instalación de Apache2/mod_fcgi/PHP5

Podemos instalar Apache2, mod_fcgid, y PHP5 de la siguiente forma:

yum install httpd mod_fcgid php-cli

Si Apache2 ya estaba instalado con PHP5 como módulo de Apache, entonces deshabilitamos el módulo PHP5 abriendo  / etc / httpd / conf.d / php.conf …

vi /etc/httpd/conf.d/php.conf

… y comentamos cada cosa en ese archivo, quedando como se muestra a continuación:
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
#<IfModule prefork.c>
# LoadModule php5_module modules/libphp5.so
#</IfModule>
#<IfModule worker.c>
# LoadModule php5_module modules/libphp5-zts.so
#</IfModule>

#
# 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

Entonces, vamos a crear el sistema de enlaces de inicio de Apache:

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

A continuación sabrimos  / etc / php.ini … : vi /etc/php.ini …  y agregamos: cgi.fix_pathinfo línea = 1, justo al final del archivo:

[...]
cgi.fix_pathinfo = 1

Después recargue Apache: /etc/init.d/httpd reload

Paso 2: La creación de Vhosts Para http://www.example1.com Y http://www.example2.com

Ahora voy a crear dos vhosts, http://www.example1.com (con la raíz del documento / var/www/web1/web) y http://www.example2.com (con la raíz del documento / var/www/web2/web). http://www.example1.com será propiedad del usuario y grupo web1, y http://www.example2.com por el usuario y grupo web2.

Primero creamos los usuarios y 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
Después creamos los documentos de root y lo hacemos propiedad de los usuarios / grupos web1 resp. 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
Ahora, vamos a correr PHP usando suexec; el documento de suexec como root es / var / www, como muestra el siguiente comando:
/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_UID_MIN=500
-D AP_USERDIR_SUFFIX=”public_html”
[root@server1 ~]#

Por lo tanto, no puede llamar a los binarios de PHP (/ usr / bin / php-cgi) directamente, ya que se encuentra fuera de la raíz de documentos de suexec. Como suexec no permite enlaces simbólicos, la única manera de resolver el problema es crear un wrapper script para cada sitio web en un subdirectorio de / var / www, el wrapper script entonces llamará el binario de PHP / usr / bin / php-cgi . El wrapper script debe ser propiedad del usuario y grupo de cada sitio web, por lo tanto necesitamos un wrapper script para cada sitio web. Voy a crear los scripts de envoltorio de los subdirectorios de / var / www / php-fcgi secuencias de comandos, por ejemplo, / var/www/php-fcgi-scripts/web1 y / 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-cgi

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-cgi

La línea de PHPRC contiene el directorio donde el archivo se encuentra php.ini (es decir, / etc / traduce en / etc / php.ini). PHP_FCGI_MAX_REQUESTS es el número máximo de peticiones antes de un proceso de fcgid se detiene y uno nuevo se inicia. PHP_FCGI_CHILDREN define el número de niños de PHP que se pondrá en marcha.

La php-fcgi-scripts de arranque debe ser ejecutable, y ellos (y los directorios están en) debe ser propiedad del usuario del sitio web y grupo:

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

Ahora vamos a crear la vhosts Apache para http://www.example1.com y http://www.example2.com. Para esto añadir las siguientes dos vhosts al final de / etc / httpd / conf / httpd.conf:

vi /etc/httpd/conf/httpd.conf

[…]
NameVirtualHost *:80

<VirtualHost *:80>
ServerName http://www.example1.com
ServerAlias example1.com
ServerAdmin webmaster@example1.com
DocumentRoot /var/www/web1/web/

<IfModule mod_fcgid.c>
SuexecUserGroup web1 web1
PHP_Fix_Pathinfo_Enable 1
<Directory /var/www/web1/web/>
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
</Directory>
</IfModule>

# ErrorLog /var/log/apache2/error.log
# CustomLog /var/log/apache2/access.log combined
ServerSignature Off

</VirtualHost>

<VirtualHost *:80>
ServerName http://www.example2.com
ServerAlias example2.com
ServerAdmin webmaster@example2.com
DocumentRoot /var/www/web2/web/

<IfModule mod_fcgid.c>
SuexecUserGroup web2 web2
PHP_Fix_Pathinfo_Enable 1
<Directory /var/www/web2/web/>
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
</Directory>
</IfModule>

# ErrorLog /var/log/apache2/error.log
# CustomLog /var/log/apache2/access.log combined
ServerSignature Off

</VirtualHost>

Asegúrese de rellenar correctamente los paths (así como el usuario correcto y el grupo en las líneas de SuexecUserGroup).

Actualizar Apache después:

/etc/init.d/httpd reload

Paso 3: Testing

Ahora vamos a crear una pequeña prueba, creando, valga la redundancia un archivo PHP, por ejemplo, en el sitio web de http://www.example1.com

vi /var/www/web1/web/info.php

<?php
phpinfo();
?>

… y llama a ese archivo en un navegador (http://www.example1.com/info.php). Si todo va bien, la salida debe ser similar a esto, y deberían ver CGI / FastCGI en la línea de la API de servidor:

Paso 4: Personalizando Php.ini para cada sitio Web

Debido a que cada sitio web tiene su propio wrapper script de arranque fcgi , es posible definir diferentes archivos php.ini para diferentes sitios web. Para demostrar esto, voy a copiar el archivo php.ini por defecto (/ etc / php.ini) a la / var/www/web2 / y hacer http://www.example2.com utilizar el php.ini en el directorio / var/www/web2 / directorio:

cp /etc/php.ini /var/www/web2/
chown web2:web2 /var/www/web2/php.ini
(Ahora puede modificar / var/www/web2/php.ini a sus gustos.)

Entonces abrimos / var/www/php-fcgi-scripts/web2/php-fcgi-starter

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

y ponemos  / var/www/web2 / en la línea de PHPRC:

#!/bin/sh
PHPRC=/var/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Actualizamos Apache después: /etc/init.d/httpd reload

Creamos un nuevo phpinfo (); archivo para http://www.example2.com

vi /var/www/web2/web/info.php

<?php
phpinfo();
?>

… y lo llaman en un navegador (http://www.example2.com/info.php). La línea de configuración archivo cargado debe ahora mostrar / var/www/web2/php.ini:

Paso 5: Cambio de Valores de configuración de PHP individual

En lugar de aprobar un nuevo archivo de php.ini todo a su sitio web, así como se puede cambiar la configuración única de configuración de PHP en el php-fcgi-wrapper script de arranque (o usar una combinación de ambos), añadiendo la opción-d al PHP ejecutable. Por ejemplo, si quiero magic_quotes_gpc desactivar la http://www.example2.com sitio web, lo haría de la siguiente manera:

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-cgi -d magic_quotes_gpc=off

Actualizamos Apache después: /etc/init.d/httpd reload
Luego llame a la secuencia de comandos info.php de nuevo en un navegador (http://www.example2.com/info.php) y la búsqueda de la línea de magic_quotes_gpc – debería mostrar ahora:

Algunos links:

Fuente: http://www.howtoforge.com/

Publicado en Fedora, How to, Tics. 1 Comment »

Una respuesta to “Configurar Apache2 con mod_fcgid y PHP5 en Fedora 11”

  1. Cristian Muñoz Says:

    Articulo interesante. Aunque manejo Debian igual sirve como guia.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: