Cualquier persona relacionada con el mundo del hosting o de la programación en general de seguro ha escuchado hablar sobre PHP. Se trata de uno de los lenguajes de programación más usados del mundo y está presente en millones de sitios web a través de toda la Internet. Hoy vamos a hablarte de todo lo que necesitas saber sobre PHP en general y sobre el servidor PHP.
Contenido
¿Qué es PHP?
Siempre es bueno hacer una pequeña introducción del tema a tratar, sobre todo para quienes no estén muy familiarizados con la temática del artículo, PHP en este caso, o más en concreto, los servidores PHP. Entonces, ¿qué es PHP?
Pues para empezar PHP es un lenguaje de programación orientado principalmente para el desarrollo a nivel web, aunque claro se puede usar en otras áreas, sin embargo lo más común es verlo implementado en sitios web, y es gracias a él que existen algunos CMS muy populares como por ejemplo WordPress.
Se trata de un lenguaje de programación gratuito y de código abierto que cualquier puede descargar y utilizar. Esto ha hecho que sea adoptado por grandes proyectos como ya el mencionado WordPress, además de que es usado por grandes compañías del mundo de Internet en algunos de sus productos o servicios, como por ejemplo Facebook y Google.
Dada su curva de aprendizaje y el hecho de que es tan usado, algunos lo consideran como el lenguaje más adecuado para comenzar en el mundo de la programación web.
El código de PHP es ejecutado del lado del servidor, y el resultado de este código es despachado al usuario mediante un HTML plano. ¿Y esto cómo se realiza exactamente? Pues aquí entran en juego los servidores PHP.
¿Qué es un servidor PHP?
Es importante aclarar que por servidor PHP no nos estamos refiriendo a las típicas instalaciones de un servidor LAMP y similares que pueden aparecer en los primeros resultados de buscadores si buscamos «servidores PHP», a lo que haremos énfasis en este artículo es al software que está orientado a la interpretación del lenguaje PHP del lado del servidor.
Y es que justamente en el párrafo anterior ya hemos respondido un poco a la pregunta del título: el servidor PHP es aquel que se encargará de interpretar el código PHP de una aplicación, dando como resultado un HTML plano que será despachado por el servidor web.
Existen distintos tipos de servidores PHP, algunos tienen ventajas o desventajas con respecto a otros, y los procesos de instalación también pueden variar por supuesto, así que vamos a echarle un vistazo más en profundidad a estos temas.
Tipos de servidores PHP
Como ya decíamos, hay varios servidores PHP ahí fuera que podemos utilizar, y alguno realmente estupendo de ellos es que la mayoría son gratuitos. Es decir, tenemos un lenguaje de programación gratis y un servidor de PHP también gratis, ¿qué más se puede pedir? Veamos entonces cuáles son algunos de los servidores PHP existentes.
PHP-FPM
Desde hace muchos años PHP-FPM es nuestro servidor de PHP favorito, y probablemente lo seguirá siendo durante un largo tiempo más si continúa siendo igual de bueno. PHP-FPM funciona como un servidor de PHP independiente del web server, y es posible conectarnos con él mediante ciertos módulos en el caso de Apache, o a través de un socket en el caso de Nginx. Se trata de un servidor PHP fácil de instalar y de configurar, además claro de tener una estupenda performance.
PHP-PM
Este es otro servidor PHP definido como un «manejador de procesos y balanceador» para aplicaciones hechas en PHP. En la mayoría de los entornos PHP-PM no es tan eficiente como PHP-FPM por ejemplo, sin embargo donde realmente brilla es a la hora de despachar aplicaciones basadas en frameworks como Symfony.
Sí señor, su rendimiento en este caso es extremadamente alto, así que si tienes algún desarrollo hecho en Symfony deberías considerar utilizarlo.
HHVM
Este es un software de máquina virtual que está orientado para la ejecución de scripts en Hack, y anteriormente a la versión 4.0 también podía interpretar aplicaciones PHP. Lamentablemente la compatibilidad con PHP fue removida el año pasado, sin embargo es posible montar una versión 3.x para utilizarla en el despacho de aplicaciones hechas en PHP.
Su rendimiento es muy bueno, aunque la instalación en algunos entornos puede ser algo complicada.
Handlers usados en Apache
Estos en realidad no encajan con lo que sería un servidor PHP, sin embargo igual los vamos a poner en la lista porque son los manejadores de PHP que Apache puede usar, y algunos son bastante buenos por cierto. Si bien FPM puede entrar en esta categoría, nosotros preferimos usarlo como un server PHP independiente.
Hay varios handlers de PHP compatibles con Apache, y dejando FPM del lado no caben dudas de que el mejor sería FCGI, que implementa varias mejoras en velocidad y seguridad con respecto a CGI, muy usado en su momento pero prácticamente olvidado hoy en día.
Cómo instalar un servidor PHP
En nuestra opinión PHP-FPM es de lo mejor que se puede encontrar ahí fuera para el despacho de PHP, aunque claro, funciona en conjunto con un servidor web, que en la mayoría de los casos suele ser Nginx aunque hay quienes también lo usan con Apache, pero claro, obtendrán un rendimiento menor en ese caso.
Sea como sea, en esta oportunidad te vamos a mostrar cómo instalar un servidor PHP, o más concretamente cómo instalar PHP-FPM, y también vamos a realizar algunas configuraciones básicas para el mismo de forma que lo tengas 100% listo para conectarlo con un servidor web como Nginx o el de tu preferencia.
Para la instalación bajo entornos CentOS solamente debemos recurrir a nuestro querido Yum (ahora reemplazado por DNF). Por su lado, para distros como Ubuntu o Debian podemos utilizar Apt, así que vamos a ver cómo se realiza la instalación y configuración en ambos entornos.
Para poder instalar PHP-FPM en CentOS, RHEL y derivados basta con correr el siguiente comando:
yum install php-fpm
Esto instalará PHP-FPM y otros paquetes que sean requeridos como por ejemplo el PHP base. De todas maneras también vamos a instalar otros paquetes comunes de PHP que suelen ser utilizados por distintos tipos de aplicaciones PHP:
yum install php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-mysql php-cli php-mcrypt php-ldap php-zip php-curl
Ten en cuenta que la versión de PHP que se instale va a variar dependiendo de la versión de tu sistema operativo y repos activos. Si quieres usar un PHP moderno como por ejemplo PHP 7.3 te recomendamos utilizar un repo como Remi, que te permite instalar distintas versiones de PHP y sus paquetes, incluso en forma paralela, resultando estupendo si necesitas correr distintas versiones de PHP en el mismo servidor.
Una vez tenemos instalado PHP-FPM podemos comenzar a realizar una configuración básica del servicio, para esto es necesario modificar un solo archivo, o bien dos dependiendo de cómo queramos configurarlo, pero antes de proceder con eso vamos a ver cómo se puede instalar en Ubuntu y Debian, porque obviamente no todo el mundo usa distros como RHEL y derivados.
Primero vamos a actualizar el sistema para asegurar que tengamos todos los paquetes al día:
apt update
Y ahora sí podemos proceder con la instalación de PHP-FPM, que está integrado en los repositorios por defecto del sistema:
apt install php-fpm
Y vamos a instalar algunos paquetes adicionales que requieren las aplicaciones PHP para funcionar de manera correcta:
apt install php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-mysql php-cli php-mcrypt php-ldap php-zip php-curl
Ahora que ya hemos visto cómo instalarlo en distintos sistemas vamos a ver cómo realizar una configuración básica del mismo para poder posteriormente correrlo. En esta oportunidad lo haremos en CentOS pero es similar para otras distros.
Para la configuración de PHP-FPM el archivo principal es /etc/php-fpm.conf, sin embargo este archivo no es necesario modificarlo para nada, solo en unos pocos casos se hace y no es algo que se necesite para una instalación básica. De todas formas es importante mencionarlo porque este archivo posee un include para los archivos .conf ubicados en la siguiente ruta:
/etc/php-fpm.d/*.conf
Estos serán los archivos donde realmente vamos a configurar PHP-FPM. Por defecto aquí se incluye un solo archivo llamado www.conf, el cual podemos usar a modo de template para futuras configuraciones, aunque por ahora nos enfocaremos solo en este.
Vamos a editarlo:
cd /etc/php-fpm.d nano -w www.conf
Por supuesto si no quieres usar nano puedes utilizar tu editor preferido, ya sea vim u otro, aunque nosotros usaremos nano en este tutorial.
Dentro del archivo vamos a encontrar un buen montón de variables, pero lo primero que debes configurar es el nombre de nuestro pool de PHP-FPM. Cada uno de estos pool es un conjunto de configuraciones para PHP, y se puede configurar un pool en cada archivo .conf dentro del directorio /etc/php-fpm.d
El nombre del pool se define en la cuarta línea del archivo .conf que estamos editando, por ejemplo en el archivo por defecto www.conf se ve así:
; Start a new pool named 'www'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name ('www' here) [www]
Esa cuarta línea que contiene «[www]» indica el nombre de nuestro pool de FPM. Esto es simplemente un nombre, podemos ponerle el que nosotros queramos, lo importante es que no se repita en distintos archivos, es decir, el nombre de cada pool debe ser único. Si queremos cambiarle de nombre por ejemplo a «minuevapool» simplemente dejamos la línea configurada de esta manera:
[minuevapool]
Una vez configurado eso vamos a configurar otras variables:
- user = en esta variable vamos a configurar un usuario que manejará los procesos de PHP del sitio. Esto es óptimo para la seguridad, ya que reducirá la necesidad de usar permisos 777. Normalmente se configura el mismo usuario que es usa para el sitio a nivel de FTP, ya que ya posee privilegios sobre su carpeta, aunque si lo deseamos podemos configurar otro.
- group = esta variable se configura de forma similar a la anterior y sirve para el mismo propósito.
Veremos que en las variables user y group por defecto se utiliza «apache», pero no es necesario colocar allí el usuario del servidor web ya que lo vamos a configurar en las siguientes variables:
- listen.owner = aquí sí es donde colocamos el usuario de nuestro web server. Por ejemplo si usamos Nginx como servidor web entonces el usuario será «nginx», en cambio si usamos otro como Apache el usuario tendrá que ser simplemente «apache» o «httpd».
- listen.group = esta variable es similar a la anterior de listen.owner, es decir que debemos colocar el usuario de nuestro web server.
- listen.mode = este vamos a dejarlo simplemente en 0666, con este modo es más que suficiente.
Y finalmente vamos a ajustar una variable más que es simplemente «listen», la cual se encarga de indicar cuál será el socket usado por nuestra pool de PHP-FPM, se puede especificar un puerto o se puede especificar un archivo, generalmente dentro de /tmp, y en este ejemplo usaremos un archivo:
listen = /tmp/minuevapool.sock
Como podemos ver el nombre que elegimos, por simplicidad y para usar un estándar, es el mismo que el del propio pool, o sea «minuevapool».
Y con esto sería suficiente para tener una configuración básica de FPM, solo resta guardar los cambios e iniciar el servicio:
service php-fpm start
Y por las dudas lo reiniciamos para verificar que se detenga y arranque correctamente:
service php-fpm restart
Podemos agregarlo al booteo del sistema para que corra automáticamente en caso de que el servidor sea reiniciado en algún momento:
chkconfig php-fpm on
En PHP-FPM hay unas cuantas variables más que podemos ajustar, aunque como decíamos esta es solo una configuración básica, puede que tu sitio web necesites otros ajustes adicionales para correr correctamente si tu tráfico es alto, aunque para webs de poco y mediano tráfico debería ser más que suficiente.
Conclusión
En esta oportunidad hemos aprendido sobre qué son los servidores PHP exactamente. Como ya decíamos se trata de un software que correr del lado del servidor y que se usa para interpretar los scripts de PHP para que el webserver posteriormente pueda despacharlos como un HTML plano.
En esta ocasión hemos visto varios ejemplos de servidor PHP y nos hemos enfocado en PHP-FPM, que es uno fácil de instalar y configurar, y además funciona muy bien. PHP-FPM suele dar excelentes resultados cuando se utiliza en conjunto con Nginx.