GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Instalación de Nginx con PHP y MariaDB (como reemplazo de MySQL) - LEMP - en Ubuntu 15.10 (Wiley Werewolf)

Nginx (pronunciado "motor x") es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rico conjunto de funciones, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puede instalar Nginx en un servidor Ubuntu 15.10 con soporte PHP (a través de PHP-FPM) y MariaDB (como reemplazo de MySQL). El término LEMP significa:Linux + Nginx + MySQL + PHP.

1 nota preliminar

En este tutorial, usaré el nombre de host server1.example.com con la dirección IP 192.168.1.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda.

2 Instalación MariaDB

Instalaré MariaDB en lugar de MySQL, MariaDB es una bifurcación de MySQL mantenida por el fundador original de MySQL, Monty Widenius, que tiene algunas mejoras de velocidad y características en comparación con MySQL. Para instalar MariaDB, ejecute:

sudo apt-get -y install mariadb-server mariadb-client

MariaDB actualmente no tiene una contraseña establecida para el usuario root. Ejecute el comando mysql_secure_installation para configurar una contraseña y eliminar la base de datos de prueba.

sudo mysql_secure_installation

Se le harán estas preguntas:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

3 Instalación de Nginx

Nginx está disponible como paquete para Ubuntu 15.10. Puede ser que el servidor web apache esté instalado en su servidor y esto podría causar un conflicto. Compruebe que apache no se está ejecutando:

ps aux | grep apache2

Si este comando no arroja ningún resultado, continúe con la instalación de Nginx.

Elimine Apache en caso de que el comando anterior muestre algunos procesos de Apache con estos comandos:

sudo systemctl stop apache2.service
sudo systemctl disable apache2.service
sudo apt-get remove apache2

Ahora podemos instalar nginx.

sudo apt-get install nginx

Inicie Nginx después:

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Escriba la dirección IP o el nombre de host de su servidor web en un navegador (por ejemplo, http://192.168.1.100), y debería ver la siguiente página:

¿Por qué muestra "Apache2" en lugar de Nginx en esa página? El texto de la página no refleja el servidor web en ejecución real, la página anterior es solo la página predeterminada en Ubuntu en la raíz del documento /var/www/html/ que utilizan Apache y Nginx. Para verificar que Nginx realmente está sirviendo esta página, puede mirar los encabezados HTTP en la consola de análisis de red de Firefox:

O verifica en el shell con el que se ejecuta nginx:

ps aux | grep nginx

El resultado debería mostrar los procesos nginx así:

4 Instalación de PHP5

Podemos hacer que PHP5 funcione en Nginx a través de PHP-FPM. PHP-FPM (Administrador de procesos FastCGI) es una implementación alternativa de PHP FastCGI con algunas funciones adicionales útiles para sitios de cualquier tamaño, especialmente sitios más concurridos, que instalamos de la siguiente manera:

sudo apt-get install php5-fpm

PHP-FPM es un proceso daemon (con el script de inicio php5-fpm) que ejecuta un servidor FastCGI en el socket /var/run/php5-fpm.sock.

5 Configuración de Nginx

La configuración de Nginx está en el archivo /etc/nginx/nginx.conf que abrimos ahora en el editor nano:

sudo nano /etc/nginx/nginx.conf

La configuración es fácil de entender (puede obtener más información aquí:http://wiki.nginx.org/NginxFullExample y aquí:http://wiki.nginx.org/NginxFullExample2)

Primero (esto es opcional) establezca el keepalive_timeout en un valor razonable:

[...]
    keepalive_timeout   2;
[...]

Los hosts virtuales se definen en los contenedores del servidor {}. El host virtual predeterminado se define en el archivo /etc/nginx/sites-disponible/default. Modifiquémoslo de la siguiente manera:

sudo nano /etc/nginx/sites-available/default
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}

nombre del servidor _; lo convierte en un vhost catchall predeterminado (por supuesto, también puede especificar un nombre de host aquí como www.example.com).

He agregado index.php a la línea de índice. raíz /usr/share/nginx/html; significa que la raíz del documento es el directorio /usr/share/nginx/html.

La parte importante para PHP es la ubicación ~ \.php$ {} estrofa. Descoméntalo para habilitarlo. Tenga en cuenta que es importante habilitar la línea "include snippets/fastcgi-php.conf;" dentro de la estrofa de ubicación de PHP para evitar vulnerabilidades de día cero (consulte http://wiki.nginx.org/Pitfalls#Passing_Unected_Requests_to_PHP y http://forum.nginx.org/read.php?2,88845,page=3).

Ahora guarde el archivo y vuelva a cargar nginx:

sudo service nginx reload

A continuación, abra /etc/php5/fpm/php.ini...

sudo nano /etc/php5/fpm/php.ini

... y establezca cgi.fix_pathinfo=0:

[...]
; 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
[...]

Recargar PHP-FPM:

sudo service php5-fpm reload

Ahora cree el siguiente archivo PHP en la raíz del documento /var/www/html:

sudo nano /var/www/html/info.php
<?php
phpinfo();
?>

Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.1.100/info.php):

Como puede ver, PHP5 funciona y funciona a través de FPM/FastCGI, como se muestra en la línea API del servidor. Si se desplaza hacia abajo, verá todos los módulos que ya están habilitados en PHP5. MySQL no se encuentra en la lista, lo que significa que aún no tenemos compatibilidad con MySQL en PHP5.

6 Obtener compatibilidad con MariaDB / MySQL en PHP

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php5-mysqlnd. Es una buena idea instalar algunos otros módulos de PHP5, ya que podría necesitarlos para sus aplicaciones. Puede buscar módulos PHP5 disponibles como este:

apt-cache search php5

Elige los que necesites e instálalos así:

sudo apt-get install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu es un caché de código de operación de PHP gratuito para almacenar en caché y optimizar el código intermedio de PHP. Es similar a otros cachés de código de operación de PHP, como eAccelerator y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar su página PHP.

APC se puede instalar de la siguiente manera:

sudo apt-get install php5-apcu

Ahora recarga PHP-FPM:

sudo service php5-fpm reload

Ahora vuelva a cargar http://192.168.1.100/info.php en su navegador y desplácese hacia abajo hasta la sección de módulos nuevamente. Ahora debería encontrar muchos módulos nuevos allí, incluido el módulo MySQL:

7 Hacer que PHP-FPM use una conexión TCP

De forma predeterminada, PHP-FPM escucha en el socket /var/run/php5-fpm.sock. También es posible hacer que PHP-FPM utilice una conexión TCP. Para ello, abra /etc/php5/fpm/pool.d/www.conf...

sudo nano /etc/php5/fpm/pool.d/www.conf

... y haz que la línea de escucha tenga el siguiente aspecto:

[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]

Esto hará que PHP-FPM escuche en el puerto 9000 en la IP 127.0.0.1 (localhost). Asegúrese de utilizar un puerto que no esté en uso en su sistema.

Luego recarga PHP-FPM:

sudo php5-fpm reload

A continuación, revise su configuración de nginx y todos sus vhosts y cambie la línea fastcgi_pass unix:/var/run/php5-fpm.sock; a fastcgi_pass 127.0.0.1:9000;, p. así:

sudo nano /etc/nginx/sites-available/default
[...]
 
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
}
[...]

Finalmente recargar nginx:

sudo service nginx reload

8 Descarga de imagen de maquina virtual de este tutorial

Este tutorial está disponible como imagen de máquina virtual lista para usar en formato ovf/ova, compatible con VMWare y Virtualbox. La imagen de la máquina virtual utiliza los siguientes detalles de inicio de sesión:

Inicio de sesión SSH/Shell

Nombre de usuario:administrador
Contraseña:howtoforge

Este usuario tiene derechos sudo.

Iniciar sesión en MariaDB

Nombre de usuario:root
Contraseña:howtoforge

La IP de la VM es 192.168.1.100, se puede cambiar en el archivo /etc/network/interfaces. Cambie todas las contraseñas anteriores para proteger la máquina virtual.

9 Enlaces

  • nginx:http://nginx.net/
  • Wiki de nginx:http://wiki.codemongers.com/Main
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • Ubuntu:http://www.ubuntu.com/


Ubuntu
  1. Instalación de Nginx en Ubuntu 14.04 y 16.04

  2. Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Ubuntu 14.04 LTS

  3. Tutorial del servidor LAMP de Ubuntu 14.10 con Apache 2, PHP 5 y MySQL (MariaDB)

  4. Tutorial del servidor LAMP de Ubuntu 15.04 con Apache 2, PHP 5 y MariaDB (en lugar de MySQL)

  5. Instalación y configuración de Php y Nginx en Ubuntu 20.04

Instalación de Lighttpd con PHP (modo PHP-FPM) y MySQL o MariaDB en Ubuntu 15.10

Instalación de Nginx con PHP (como PHP-FPM) y MariaDB (LEMP) en Debian 8

Nginx 1.7.9 + PHP5-FPM + MySQL (LEMP) en Ubuntu 14.10

Cómo instalar Linux, Nginx, MySQL, PHP (LEMP Stack) en Ubuntu 18.04

Instale Nginx, MySQL, PHP (LEMP Stack) en Ubuntu 20.04 LTS

Cómo instalar Nginx, MySQL y PHP (LEMP) en un servidor Ubuntu 15.04