Proceso de instalación y configuración del Servidor Web Nginx en Ubuntu 18.04
Qué es Nginx
Nginx es un Servidor de Web de alto redimiento y también un Proxy para protocolos de correo y que ha sido diseñado específicamente para gestionar tráfico web intenso.
Una de las ventajas de Nginx es su rendimiento para servir contenido estático (ficheros html, multimedia , etc …)
Su mayor defecto es que no maneja el contenido dinámico de la misma forma y necesita PHP-FPM (FastCGI Process Manager) para servir contenidos como es debido.
PHP es ejecutado como un servicio por separado el cual utiliza PHP-FPM para obtener un mayor rendimiento y una mejora en la gestión de la memoria.
Por lo que si tienes un servidor con una aplicación como Magento, WordPress o similares tu elección debe ser Nginx + PHP-FPM.
Instalación
Actualizamos nuestro sistema de paquetes y upgradeamos si es necesario
1 2 |
$ sudo apt update $ sudo apt upgrade |
Instalamos Nginx
1 |
$ sudo apt install nginx |
Habilitamos Ngnix para que se active en cada reinicio de la máquina.
1 2 3 |
$ sudo systemctl enable nginx Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable nginx |
Iniciamos Ngnix
1 |
$ sudo systemctl start nginx |
Otra serie de comandos de utilidad son:
- $ sudo systemctl restart nginx
- $ sudo systemctl stop nginx
- $ sudo systemctl reload nginx
- $ sudo systemctl status nginx
- $ nginx -t
Restart renicia Nginx, stop para el servicio de Nginx y mata el proceso por lo que cierra todas las conexiones que estén abiertas, reload vuelve a cargar las configuraciones de Nginx, status nos muestra el estado actual del servidor, con nginx -t comprobaremos que nuestros ficheros de configuración sean correctos.
El siguiente paso es crear el fichero de configuración de nuestro dominio:
1 |
$ sudo nano /etc/nginx/sites-available/dev.artegrafico.local |
E incluir el siguiente contenido para que funcione correctamente (utiliza un nombre a tu elección)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
server { # puerto de escucha para conexiones HTTP listen 80; # directorio local root /var/www/dev.artegrafico.local; # index index index.php index.html; server_name dev.artegrafico.local; location / { # tipo de páginas que servirá try_files $uri $uri/ /index.php?$args; } # los ficheros php son generados por el modulo php-pfm de php location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } # denegar el acceso a ficheros .htaccess location ~/\.ht { deny all; } # log files access_log /var/log/nginx/dev.artegrafico.local/access.log; error_log /var/log/nginx/dev.artegrafico.local/error.log; # favicon location = /favicon.ico { log_not_found off; access_log off; } # robots location = /robots.txt { allow all; log_not_found off; access_log off; } # media location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } } |
El siguiente paso es hacer un enlace simbólico de nuestro fichero de configuración para poder habilitarlo en el directorio sites-enabled/
1 |
$ sudo ln -s /etc/nginx/sites-available/dev.artegrafico.local /etc/nginx/sites-enabled/dev.artegrafico.local |
Comprobamos que nuestra configuración es correcta y recargamos la configuración
1 2 |
$ sudo nginx -t $ sudo systemctl reload nginx |
Incluimos el nombre del Host que acabamos de crear a nuestro fichero hosts
1 2 |
$ sudo nano /etc/hosts 127.0.1.101 dev.artegrafico.local |
Recuerda que para que funcione correctamente y sirva ficheros dinámicos PHP necesitamos instalar el módulo PHP-FPM de PHP
1 |
$ sudo apt install php-fpm |
Instalamos el soporte para MySQL
1 |
$ sudo apt install php-mysql |
Crea las carpetas para el registro de logs de nuestro nuevo dominio
1 |
$ sudo mkdir /var/log/nginx/dev.artegrafico.local/ |
Crea el directorio local y asigna permisos al usuario que lo vaya a utilizar. Puedes configurar vsftpd y crear el usuario pero eso ya lo veremos en otro tema.
1 |
$ sudo mkdir /var/www/dev.artegrafico.local/ |
Opciones de configuración de Nginx
Puertos de escucha
La directiva listen le indica a Nginx el puerto TPC donde debería escuchar las conexiones HTTP.
Por el momento vamos a indicarle el puerto 80, pero podemos configurar otro cualquiera o direcciones IPV6
Nombre del servidor
Ngnix permite múltiples dominios para ser servidos desde una sola dirección IP.
Se recomienda crear un fichero de configuración para cada dominio del servidor.
1 |
server_name dev.artegrafico.local www.dev.artegrafico.local; |
Tambien acepta el uso de comodines
1 2 |
server_name *.artegrafico.local; server_name dev.*; |
Nginx Nos permite seleccionar nombres que no sean nombres de dominio válidos por lo que nos es útil si nuestro servidor esta en una LAN o si lo usamos para tareas de programación.
Bloques location
Estos bloques location nos permiten configurar Nginx dependiendo del tipo de petición que sea recibido.
Podremos ejecutar expresiones regulares usando (~), operador (=) para buscar coincidencias exactas de directorios o ficheros, etc ..
1 2 3 4 5 6 7 |
location / { } location /images/ { } location /blog/ { } location ~ ^/Blog(/|/index\.php)$ { } location = /robots.txt { { } location = /favicon.ico { } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { } |