Este documento describe una alternativa compatible con una infraestructura LAMP (Linux, Apache, MySQL y PHP). La infraestructura LEMP remplaza el componente del servidor web Apache (que se corresponde con la "A" en LAMP) con Nginx (o "Engine x", lo que se corresponde con la E en LEMP). LEMP está compuesto de una variedad de programas con software de código abierto, utilizados para construir y ejecutar servidores web.
Esta guía está escrita para un usuario root. Los comandos que requieren privilegios elevados están precedidos por sudo
. Si usted inició sesión como root obvie el uso de este prefijo.
Hay varias formas de instalar Nginx. El método aquí presentado obtiene los paquetes desde el repositorio del proyecto Debian y proporciona una versión estable y probada de este servidor web. Existen otros métodos, pero no son abordados en este tutorial.
Instale Nginx:
sudo apt-get install nginx
En Nginx los bloques server
son equivalentes a los hosts virtuales de Apache. Cree el archivo /etc/nginx/sites-available/ejemplo.com
con el bloque server
. En este y todos los pasos subsecuentes remplace ejemplo.com
con los datos de su dominio:
Extracto del archivo: /etc/nginx/sites-available/ejemplo.com
server {
listen 80;
servername www.ejemplo.com ejemplo.com;
accesslog /var/www/html/ejemplo.com/logs/access.log;
errorlog /var/www/html/ejemplo.com/logs/error.log;
location / {
root /var/www/html/ejemplo.com/publichtml;
index index.html index.htm;
}
}
Cree los directorios public_html
y log
a los cuales se hace referencia arriba:
sudo mkdir -p /var/www/html/ejemplo.com/{public_html,logs}
Habilite el sitio y reinicie el servidor web:
sudo ln -s /etc/nginx/sites-available/ejemplo.com /etc/nginx/sites-enabled
sudo /etc/init.d/nginx restart
Para desactivar un sitio, simplemente elimine en enlace simbólico y reinicie Nginx:
sudo rm /etc/nginx/sites-enabled/ejemplo.com
sudo /etc/init.d/nginx restart
El archivo fuente es guardado y puede volver a activar el sitio en cualquier momento.
Para poder desarrollar aplicaciones que usan PHP debe implementar “PHP-FastCGI”, el cual permite que Nginx maneje e interprete el código PHP de sus páginas. Comience instalado las dependencias requeridas:
sudo apt-get install php5-cli php5-cgi spawn-fcgi php-pear
La siguiente secuencia de comandos:
Descarga un script compacto para PHP-FastCGI.
Configura un script de inicialización para el control del proceso.
Inicia el proceso por primera vez.
Asegura que el proceso se iniciará después de un ciclo de reinicio.
cd /opt/
sudo wget -O php-fastcgi-deb.sh https://www.linode.com/docs/assets/1548-php-fastcgi-deb.sh
sudo mv /opt/php-fastcgi-deb.sh /usr/bin/php-fastcgi
sudo chmod +x /usr/bin/php-fastcgi
sudo wget -O init-php-fastcgi-deb.sh https://www.linode.com/docs/assets/1549-init-php-fastcgi-deb.sh
sudo mv /opt/init-php-fastcgi-deb.sh /etc/init.d/php-fastcgi
sudo chmod +x /etc/init.d/php-fastcgi
sudo /etc/init.d/php-fastcgi start
sudo update-rc.d php-fastcgi defaults
En el bloque server
, añada una directiva location
para poder pasar PHP a través de FastCGI:
Archivo: /etc/nginx/sites-available/ejemplo.com
location ~ \.php$ {
include /etc/nginx/fastcgiparams;
fastcgipass 127.0.0.1:9000;
fastcgiindex index.php;
fastcgiparam SCRIPTFILENAME /var/www/html/ejemplo.com/publichtml$fastcgiscriptname;
}
Advertencia: si usted está planificando ejecutar aplicaciones que soporten cargas de archivos —imágenes, por ejemplo—, la configuración arriba puede exponerlo a riesgos de seguridad permitiendo la ejecución arbitraria de código. La explicación corta para este comportamiento es que un URI diseñado adecuadamente, el cual termina en
.php
, en combinación con un archivo malicioso de imagen que en realidad contiene un PHP válido, puede resultar en que la imagen sea procesada como si fuera PHP.
Para mitigar este problema, puede modificar su configuración para que incluya una directivatry_files
si lo desea. Por favor tenga en cuenta que esta corrección requiere queNginx
yphp-fcgi
residan en el mismo servidor.
location ~ \.php$ {
tryfiles $uri =404;
include /etc/nginx/fastcgiparams;
fastcgipass 127.0.0.1:9000;
fastcgiindex index.php;
fastcgiparam SCRIPTFILENAME /var/www/html/ejemplo.com/publichtml$fastcgiscript_name;
}
También es una buena idea asegurar los directorios cargados que su aplicación pueda usar. El siguiente extracto de configuración demuestra cómo asegurar el directorio "/imagenes
"
location ~ \.php$ {
include /etc/nginx/fastcgiparams;
if ($uri !~ "^/imagenes/") {
fastcgipass 127.0.0.1:9000;
}
fastcgiindex index.php;
fastcgiparam SCRIPTFILENAME /var/www/html/ejemplo.com/publichtml$fastcgiscriptname;
}
Cuando haya completado las modificaciones a la configuración, asegúrese de que el bloque server
esté habilitado y luego reinicie el servicio Nginx:
/etc/init.d/nginx restart
Ahora podrá implementar scripts PHP con su infraestructura LEMP.
MySQL es probablemente el motor de base de datos relacional de código abierto líder, y es una solución de base de datos popular para aplicaciones basadas en web. La instalación se explica en los siguientes pasos:
Ingrese el siguiente comando para instalar los paquetes del servidor MySQL y el soporte PHP (requerido para MySQL):
sudo apt-get install mysql-server php5-mysql
Se le pedirá que ingrese una contraseña segura para el usuario root de MySQL.
2. Abra la línea de comandos de MySQL:
mysql -u root -p
Cuando se le solicite, ingrese la contraseña root que configuró anteriormente.
Cree una base de datos y otorgue a sus usuarios los permisos correspondientes. Cambie el nombre de la base de datos (datosweb
) y el nombre de usuario (usuarioejemplo
). Además cambie el valor de SuContraseña
:
create database datosweb;
grant all on datosweb.* to 'usuarioejemplo' identified by 'SuContraseña';
Salga de MySQL:
quit
Ahora puede proporcionar las credenciales de la base de datos y el usuario a su aplicación para que esta las utilice según sus propósitos. Para asegurarse de que PHP podrá acceder al conector MySQL que acaba de instalar, reinicie el servicio PHP:
sudo /etc/init.d/php-fastcgi restart
¡Felicidades, ha instalado y ha hecho una configuración básica de una infraestructura LEMP para el desarrollo de sus aplicaciones!
Para complementar la información presentada en esta guía puede consultar los siguientes recursos. Aunque este material es provisto esperando que sea útil, tome en cuenta que no podemos certificar su actualidad o precisión.