Guía rápida para instalar PHP7.4-fpm y Nginx en Ubuntu 20.04LTS

Esta es una guía rápida de como instalar PHP 7.4-fpm y Nginx en sistema operativo Ubuntu 20.04 LTS, en este caso de uso tengo la base de datos en otro servidor para un mejor rendimiento de la aplicación. Para poder realizar la configuración debe de tener acceso como non-root y habilitado sudo.

Ingresamos al servidor por ssh de la siguiente forma.

Snippet
ssh user@10.10.10.10

Al ingresar al servidor ejecutar lo siguiente para instalar Nginx:

Snippet
sudo apt update
sudo apt install nginx

Escriba la dirección que reciba en su navegador web. Esta lo llevará a la página de destino predeterminada de Nginx:

Snippet
http://server_domain_or_IP
Welcome to nginx

Si ve esta página, significa que instaló Nginx y que habilitó el tráfico de HTTP para su servidor web de manera correcta, ahora continuaremos con la instalación de PHP y es importante comentar que Apache a diferencia de Nginx integra el intérprete PHP en cada solicitud, Nginx requiere un programa externo para gestionar el procesamiento de PHP y actuar como puente entre el intérprete PHP en sí y el servidor web. Esto permite un mejor rendimiento general en la mayoría de los sitios web basados en PHP, pero requiere configuración adicional. Deberá instalar php-fpm, que significa “PHP fastCGI process manager”, e indicar a Nginx que pase solicitudes PHP a este software para su procesamiento.

Para instalar los paquetes basicos de php-fpm ejecuta lo siguiente:

Snippet
sudo apt install php-fpm php-mysql

Ahora hemos instalado PHP y ahora es necesario configura Nginx para utilizar el procesador PHP. Al emplear el servidor web Nginx, podemos crear bloques de servidor (similares a los hosts virtuales de Apache) para encapsular los detalles de configuración y alojar más de un dominio en un único servidor.

En Ubuntu 20.04, Nginx tiene un bloque de servidor habilitado por defecto y está configurado para suministrar documentos desde un directorio en /var/www/html. Si bien esto da buenos resultados para un solo sitio, puede ser difícil de manejar si aloja varios. En lugar de modificar /var/www/html, crearemos una estructura de directorio dentro de /var/www para el sitio web your_domain y dejaremos /var/www/html establecido como directorio predeterminado que se suministrará si una solicitud de cliente no coincide con ningún otro sitio.

Cree el directorio web root para your_domain de la siguiente manera:

Snippet
sudo mkdir /var/www/your_domain

A continuación, asigne la propiedad del directorio con la variable de entorno $USER, que hará referencia a su usuario de sistema actual:

Snippet
sudo chown -R $USER:$USER /var/www/your_domain

Luego, abra un nuevo archivo de configuración en el directorio sites-available de Nginx con el editor de línea de comandos que prefiera. En mi caso yo prefiero nano:

Snippet
sudo nano /etc/nginx/sites-available/your_domain

De esta manera, se creará un nuevo archivo en blanco. Pegue la siguiente configuración básica:

Snippet
server {
    listen 80;
    server_name your_domain www.your_domain;
    root /var/www/your_domain;
 
    index index.html index.htm index.php;
 
    location / {
        try_files $uri $uri/ =404;
    }
 
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
     }
 
    location ~ /\.ht {
        deny all;
    }
 
}

Esto es lo que hacen estas directivas y estos bloques de ubicación:

  • listen: define en qué puerto Nginx escuchará. En este caso, escuchará en el puerto 80, el puerto predeterminado para HTTP.
  • root: define el root de documentos en el que se almacenan los archivos disponibles en este sitio web.
  • index: especifica en qué orden dará prioridad Nginx a los archivos de índice de este sitio web. Normalmente se prioriza los archivos index.html por sobre los index.php para permitir establecer de manera rápida una página inicial de mantenimiento en las aplicaciones de PHP. Puede modificar estas opciones de configuración para que se adapten mejor a las necesidades de su aplicación.
  • server_name: define con qué nombres de dominio y/o direcciones de IP debe responder este bloque de servidor. Introduzca esta directiva en el nombre de dominio o la dirección IP pública de su servidor.
  • location /: el primer bloque de ubicación incluye una directiva try_files, la cual comprueba la existencia de archivos o directorios que coincidan con una solicitud de URI. Si Nginx no puede encontrar el recurso apropiado, mostrará un error 404.
  • location ~ \.php$: este bloque de ubicación administra el procesamiento de PHP real al orientar a Nginx hacia el archivo de configuración fastcgi-php.conf y al archivo php7.4-fpm.sock, que declara el socket que se asocia con php-fpm.
  • location ~ /\.ht: el último bloque de ubicación maneja archivos .htaccess, que Nginx no procesa. Al agregar la directiva deny all, si algunos de los archivos .htaccess ingresan de alguna forma en el root de documentos, estos no se suministrarán a los visitantes.

Cuando finalice la edición, guarde y cierre el archivo. Si utiliza nano, puede hacerlo escribiendo CTRL+X, luego y ,y ENTER para confirmar.

Establezca un vínculo con archivo de configuración del directorio sites-enabled de Nginx para activar su configuración:

Snippet
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Esto le indicará a Nginx que utilice la configuración la próxima vez que se vuelva a cargar. Puede verificar si hay errores en la sintaxis de su configuración al escribir:

Snippet
sudo nginx -t

Si se detecta algún error, vuelva al archivo de configuración para revisar el contenido antes de continuar.

Cuando esté listo, vuelva a cargar Nginx para aplicar los cambios:

Snippet
sudo systemctl reload nginx

Listo, ahora su sitio web esta disponible en el directorio /var/www/your_domain.

Comments