Introducción

LEMP es un acrónimo de Linux, Nginx, MySQL y PHP. La pila LEMP, como la pila LAMP (con Apache en lugar de Nginx), se utiliza para desarrollar e implementar aplicaciones web. Nginx en LEMP proporciona una arquitectura modular impulsada por eventos que procesa solicitudes mediante eventos asincrónicos. Esta característica permite un alto rendimiento bajo cargas pesadas. MySQL se utiliza para almacenar los datos del sitio web, mientras que PHP se utiliza para procesar el contenido dinámico de los sitios web.

Este artículo muestra cómo instalar la pila LEMP en Centos 7 VPS o Servidor Dedicado. Demostramos el uso de las últimas versiones de los componentes de la pila LEMP en el momento de la publicación de la siguiente manera:

  • Nginx versión 1.15.2
  • PHP-FPM versión 7.2
  • Comunidad MySQL Versión 8.0

Nginx

NGINX de código abierto está disponible en dos variantes:

  • Mainline: contiene las últimas funciones y correcciones de errores, y siempre está actualizado. Es confiable, pero puede tener algunos módulos experimentales y / o algunos errores nuevos. Recomendado para servidores de desarrollo.
  • Estable: contiene las funciones más recientes con correcciones de errores críticos que se han actualizado a la versión principal. Recomendado para servidores de producción.

Hay dos formas de instalar la línea principal o el estable Nginx de la siguiente manera:

  • Instalación del paquete Nginx desde el repositorio oficial de Nginx o el repositorio oficial del sistema operativo: el método de instalación más fácil. El paquete contiene casi todos los módulos oficiales de Nginx.
  • Compile e instale desde el origen: método de instalación más flexible a medida que decide qué módulos específicos incluir en el paquete.

En este caso, estamos instalando Nginx – Mainline Type desde su repositorio oficial de Nginx creando un archivo de repositorio de Yum y pegando la configuración de la siguiente manera:

$ sudo vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Guarda el archivo y cierra.

Actualice el repositorio de Centos 7 con el repositorio de nginx e instale nginx

$ sudo yum update
$ sudo yum install nginx -y

Inicie nginx y actívelo al arrancar

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Asegúrese de que Nginx esté en funcionamiento

[linuxuser@centos7-lemp ~]$ curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.15.2
Date: Tue, 31 Jul 2018 13:03:07 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 24 Jul 2018 14:05:29 GMT
Connection: keep-alive
ETag: "5b573229-264"
Accept-Ranges: bytes

Según el resultado, confirmamos que la versión instalada 1.15.2

También puede verificar a través de su navegador e ingresar la dirección IP o el nombre de dominio de su servidor web.

http://server_domain_name_or_public_IP/

Comunidad MySQL

Instalaremos MySQL 8.0 Community (para administrar los datos del sitio web) de acuerdo con las instrucciones de nuestro tutorial Cómo instalar MYSQL 8.0 y crear una base de datos en un VPS de Linux CentOS 7 o un servidor dedicado

PHP

Se requiere PHP en la pila LEMP para permitir el procesamiento de contenido dinámico, ya que Nginx no tiene una capacidad de procesamiento PHP incorporada como otros servidores, por ejemplo, Litespeed. En este contexto instalamos PHP-FPM (FastCGI Process Manager) versión 7.2. De forma predeterminada, Centos 7 viene con PHP 5.4 que ha alcanzado su EOL, ahora está obsoleto y ya no es compatible. PHP 7.2 permite que la aplicación web se cargue más rápido y use menos recursos del sistema. Además, contiene integración de base de datos MySQL incorporada y, por lo tanto, funciona a la perfección con MySQL 8.0 instalado.

Instalar y activar el repositorio Remi

El paquete PHP-FPM está en el repositorio de Remi.

$ sudo yum install -y yum-utils
$ sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ sudo yum-config-manager --enable remi-php72

Instale PHP-FPM y los módulos de uso común

$ sudo yum install -y php72 php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache

Iniciar y activar PHP-FPM

$ sudo systemctl start php72-php-fpm
$ sudo systemctl enable php72-php-fpm

Verifique la versión de PHP

[linuxuser@centos7-lemp ~]$ php72 -v
PHP 7.2.8 (cli) (built: Jul 17 2018 08:41:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
  with Zend OPcache v7.2.8, Copyright (c) 1999-2018, by Zend Technologies

Configuración de seguridad básica de PHP

Edite el archivo php.ini y busque el parámetro cgi.fix_pathinfo, elimine el comentario y configúrelo en 0. De forma predeterminada, esta configuración permite que PHP ejecute el archivo más cercano si no se encuentra un archivo PHP que coincida exactamente. Por lo tanto, los usuarios pueden crear fácilmente solicitudes PHP maliciosas que PHP puede procesar fácilmente.

$ sudo vim /etc/opt/remi/php72/php.ini

Edite de la siguiente manera:

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

Configurar PHP-FPM para trabajar con Nginx

Edite el archivo de configuración php-fpm de la siguiente manera

$ sudo vim /etc/opt/remi/php72/php-fpm.d/www.conf
; Add Nginx user
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;   	will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx

; RPM: Keep a group allowed to write in log dir.
group = nginx

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'	- to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'             	- to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000

Reinicie el servicio php-fpm para efectuar los cambios de configuración

$ sudo systemctl restart php72-php-fpm

Edite el archivo de configuración de Nginx

$ sudo vim /etc/nginx/sites-enabled/default.conf

Después de los cambios, el archivo debería verse así:

server {
  listen   	80;
  server_name  <domain_name_or_server_public_ip_address>;
 
  #charset koi8-r;
  #access_log  /var/log/nginx/host.access.log  main;
 
  location / {
    	root   /usr/share/nginx/html;
    	index index.php index.html index.htm;
  }
 
  error_page  404          	/404.html;
 
  # redirect server error pages to the static page /50x.html
  #
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    	root   /usr/share/nginx/html;
  }
 
  # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  #
  #location ~ .php$ {
  #	proxy_pass   http://127.0.0.1;
  #}
 
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  location ~ .php$ {
   	root      	/usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  	include    	fastcgi_params;
  }
 
  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #
  #location ~ /.ht {
  #	deny  all;
  #}
}

Prueba si la configuración está bien

[linuxuser@centos7-lemp ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicie nginx para que los cambios surtan efecto

$ sudo systemctl restart nginx

Prueba PHP

Crea un archivo la información.php así y colóquelo en el directorio raíz web de Nginx

$ sudo vim /usr/share/nginx/html/info.php
<?php phpinfo(); ?>

Guardar y salir del archivo.

Luego visite la dirección del navegador – http: //your_domain_or_server_public_IP/info.php

La página web muestra información PHP sobre el servidor. Esto confirma que Nginx funciona correctamente con PHP. Por razones de seguridad, debe eliminar el archivo info.php en el directorio raíz de la web.

Conclusión

Ahora que ha instalado con éxito la pila LEMP, está listo para alojar su excelente sitio web comercial o aplicación web en el directorio raíz / usr / share / nginx / html y atender a sus clientes potenciales. ¡Es realmente así de simple!