GNU/Linux >> Tutoriales Linux >  >> Debian

Configure Apache y Php con mod_fcgid en Ubuntu/Debian

Mod Fcgid

Mod Fcgid es un módulo de apache que le permite comunicarse con una aplicación habilitada para fastcgi. Se puede usar para configurar con apache para ejecutar php sobre fastcgi. Es una alternativa al antiguo mod_fastcgi y tiene algunas diferencias con él.
En esta publicación configuraremos apache con php usando este módulo. También puede configurar apache + php con mod_fastcgi.

Dado que fastcgi mantiene la ejecución de php fuera de apache, somos libres de usar un MPM basado en subprocesos como MPM Worker.

Instalar

Para la configuración necesitamos apache, php (con cgi binario), mod_fcgid, mpm worker. Instálelos directamente desde la línea de comandos.

# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi

Habilitar mod_fcgid

# sudo a2enmod fcgid

Localizar archivos de configuración

Después de instalar los paquetes necesarios, es hora de configurar mod_fcgid. La configuración se realiza principalmente a través de varios archivos de configuración. Por lo tanto, es importante saber dónde están los archivos de configuración.

El archivo de configuración de apache en ubuntu/debian se encuentra en la siguiente ruta

/etc/apache2/sites-available/default

Para averiguar la ubicación del archivo de configuración de Apache para su distribución, use el comando apache2/httpd/apachectl.

# apachectl -S
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1)
Syntax OK

Entonces, el archivo de configuración está en /etc/apache2/sites-enabled/000-default .

Configurar Fcgid

Apache necesita configurarse para usar mod_fcgid para procesar todos los archivos ".php" y mod_fcgid necesita saber la ubicación del binario php fastcgi, que es php-cgi ubicado en

/usr/bin/php-cgi

Agregue la siguiente configuración a la sección del directorio raíz en el bloque vhost

<Ifmodule mod_fcgid.c>
	# FCGID registers a handler named fcgid-script
	AddHandler fcgid-script .php
	Options +ExecCGI
	FcgidWrapper /usr/local/bin/php-fcgid-wrapper
</IfModule>

Esto le dice a apache que use la secuencia de comandos contenedora para iniciar el proceso fastcgi php-cgi. También le dice a apache que ejecute archivos .php usando el controlador fcgid.

Para controlar la configuración de fcgid como el número máximo de procesos, agregue la configuración relevante fuera del bloque vhost.

<Ifmodule mod_fcgid.c>
	# Context - server config
	FcgidMaxProcesses 150
	# Otherwise php output shall be buffered
	FcgidOutputBufferSize 0
</IfModule>

Esta configuración se aplica al contexto del servidor y, por lo tanto, debe estar fuera de cualquier bloque Vhost.

Guión de envoltura

Ahora, el script contenedor que usa mod_fcgid para iniciar procesos php-cgi.

#!/bin/sh
# Set desired PHP_FCGI_* environment variables.
# Example:
# PHP FastCGI processes exit after 500 requests by default.
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS

# Replace with the path to your FastCGI-enabled PHP executable
exec /usr/bin/php-cgi

Estamos almacenando el script contenedor en /usr/local/bin/php-fcgid-wrapper pero se puede almacenar en cualquier lugar y la ruta debe mencionarse en la configuración de apache.

Haga que el script contenedor sea ejecutable usando chmod

/usr/local/bin# chmod +x php-fcgid-wrapper

De lo contrario, obtendrá un error en su registro de apache como este

[Tue Jun 11 02:53:20 2013] [warn] [client 127.0.0.1] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Tue Jun 11 02:53:20 2013] [error] [client 127.0.0.1] Premature end of script headers: server.php

También asegúrese de no usar la configuración "PHP_FCGI_CHILDREN". El binario php-cgi puede bifurcar múltiples procesos secundarios y administrarlos, pero fcgid no pasará más de una solicitud al binario php-cgi a la vez, por lo que no se utilizarán los procesos secundarios. Esto se explica en la documentación

PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled.

The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.

Tampoco puede usar APC con fcgid.

Referencias

http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
Debian
  1. Cómo configurar Opencart con LAMP (PHP, Apache, Mariadb) en Ubuntu 20.04

  2. Cómo configurar Opencart con LAMP (PHP, Apache, Mariadb) en Debian 11

  3. Instalar y configurar Apache y PHP con cgi en Ubuntu o Debian

  4. Instale y configure Apache y php con mod fastcgi en Ubuntu/Debian

  5. Configure Apache 2.4 y Php FPM con mod proxy fcgi en Ubuntu 13.10

Cómo configurar WordPress en Ubuntu Server con Apache

Cómo instalar Apache, MariaDB y PHP (LAMP) en Debian 11

Cómo instalar Apache con PHP-FPM en Debian 10

Cómo instalar y configurar Apache Spark en Ubuntu 21.04

Cómo instalar Drupal con Apache en Debian y Ubuntu

Cómo instalar y configurar Apache Spark en Ubuntu/Debian