Busqueda sobre Linux y software libre

Noticias sobre linux y software libre - Google 

Cómo instalar y configurar Nginx en linux

 Le pedimos a la Gemini, la inteligencia artificial de Google que nos explique cómo instalar y configurar Nginx en linux

Explicanos detalladamente cómo instalar y configurar Nginx en linux

¡Claro! Nginx (pronunciado "engine-x") es un servidor web de código abierto potente, ligero y de alto rendimiento. También se utiliza comúnmente como proxy inverso, balanceador de carga y caché HTTP. Aquí te presento una guía detallada sobre cómo instalar y configurar Nginx en Linux (basado en distribuciones Debian/Ubuntu y CentOS/RHEL):

Consideraciones Previas:

Acceso sudo o root: Necesitarás privilegios de administrador para instalar y configurar Nginx.

Gestor de Paquetes: Utilizaremos el gestor de paquetes predeterminado de tu distribución (apt para Debian/Ubuntu, yum o dnf para CentOS/RHEL).

Firewall: Asegúrate de que tu firewall esté configurado para permitir el tráfico en los puertos 80 (HTTP) y 443 (HTTPS) si planeas servir contenido web públicamente.

Parte 1: Instalación de Nginx

En Debian/Ubuntu:


Actualizar la Lista de Paquetes:

Bash

sudo apt update

Instalar Nginx:

Bash


sudo apt install nginx

Verificar la Instalación: Después de la instalación, Nginx debería iniciarse automáticamente. Puedes verificar su estado con:

Bash

sudo systemctl status nginx

Deberías ver un estado active (running).

Habilitar Nginx al Inicio:

Bash


sudo systemctl enable nginx

Configurar el Firewall ( UFW ): Si estás utilizando UFW (Uncomplicated Firewall), permite el tráfico HTTP y HTTPS:

Bash

sudo ufw allow 'Nginx HTTP'

sudo ufw allow 'Nginx HTTPS'

sudo ufw enable

sudo ufw status


En CentOS/RHEL:

Habilitar el Repositorio EPEL (Extra Packages for Enterprise Linux) si no está habilitado:

Bash

sudo yum install -y epel-release

# O en versiones más recientes:

# sudo dnf install -y epel-release

Instalar Nginx:

Bash


sudo yum install -y nginx

# O en versiones más recientes:

# sudo dnf install -y nginx

Verificar la Instalación:

Bash


sudo systemctl status nginx

Deberías ver un estado active (running).

Habilitar Nginx al Inicio:

Bash


sudo systemctl enable nginx

Configurar el Firewall (firewalld): Permite el tráfico HTTP y HTTPS:

Bash


sudo firewall-cmd --permanent --add-service=http

sudo firewall-cmd --permanent --add-service=https

sudo firewall-cmd --reload

sudo firewall-cmd --list-all


Parte 2: Configuración Básica de Nginx

Los archivos de configuración principales de Nginx se encuentran en el directorio /etc/nginx/. El archivo de configuración principal es nginx.conf. Las configuraciones específicas de los sitios web (hosts virtuales en Apache) se definen en archivos dentro de los directorios /etc/nginx/sites-available/ y enlazados simbólicamente a /etc/nginx/sites-enabled/.

Estructura de la Configuración:

/etc/nginx/nginx.conf: Archivo de configuración principal que incluye la configuración global, los módulos cargados y las referencias a otros archivos de configuración.

/etc/nginx/sites-available/:
Contiene archivos de configuración para cada sitio web o aplicación que deseas servir.

/etc/nginx/sites-enabled/: Contiene enlaces simbólicos a los archivos de configuración en sites-available/ para los sitios web que están activos.

/etc/nginx/conf.d/: Puede contener archivos de configuración adicionales para módulos específicos o configuraciones personalizadas.

Configuración del Bloque del Servidor (Virtual Host):

Crear un Archivo de Configuración: Por convención, se crea un archivo de configuración para cada sitio web en /etc/nginx/sites-available/. Por ejemplo, para un sitio llamado midominio.com, crearías un archivo llamado midominio.com.

Ejemplo de Configuración para midominio.com:

Nginx


server {

       listen 80;

       listen [::]:80;

       server_name midominio.com www.midominio.com;



       root /var/www/midominio.com/html;

       index index.html index.htm index.nginx-debian.html;



       location / {

       try_files $uri $uri/ =404;

       }



        location ~ \.php$ {

        include snippets/fastcgi-php.conf;

        fastcgi_pass unix:/run/php/php-fpm.sock; # Ajusta según tu configuración de PHP-FPM

        }



         location ~ /\.ht {

         deny all;

         }

}

Explicación de las Directivas:

server { ... }: Define un bloque de configuración para un servidor virtual.

listen 80; listen [::]:80;: Escucha en el puerto 80 para IPv4 e IPv6 respectivamente.

server_name midominio.com www.midominio.com;: Define los nombres de dominio para los que este bloque de servidor responderá.

root /var/www/midominio.com/html;: Especifica el directorio raíz donde se encuentran los archivos del sitio web.

index index.html index.htm index.nginx-debian.html;: Define los archivos que se servirán por defecto si se solicita un directorio.

location / { ... }: Define cómo Nginx manejará las solicitudes para la raíz del sitio.

try_files $uri $uri/ =404;: Intenta servir el archivo o directorio solicitado ($uri). Si no se encuentra, intenta con una barra al final ($uri/). Si aún no se encuentra, devuelve un error 404.

location ~ \.php$ { ... }: Define cómo Nginx manejará los archivos PHP (requiere PHP-FPM).

include snippets/fastcgi-php.conf;: Incluye una configuración predefinida para FastCGI.

fastcgi_pass unix:/run/php/php-fpm.sock;: Especifica la ubicación del socket de PHP-FPM.

location ~ /\.ht { deny all; }: Deniega el acceso a los archivos .htaccess (que son utilizados por Apache).

Crear el Directorio Raíz: Si no existe, crea el directorio raíz especificado en la directiva root:

Bash

sudo mkdir -p /var/www/midominio.com/html

sudo chown -R $USER:$USER /var/www/midominio.com/html # Ajusta el propietario según sea necesario

Crea un archivo index.html dentro de este directorio para probar.

Habilitar el Sitio Web: Crea un enlace simbólico del archivo de configuración en sites-available/ al directorio sites-enabled/:

Bash

sudo ln -s /etc/nginx/sites-available/midominio.com /etc/nginx/sites-enabled/

Deshabilitar el Sitio Web Predeterminado (opcional):
Si no lo necesitas, puedes deshabilitar la configuración predeterminada de Nginx:

Bash

sudo rm /etc/nginx/sites-enabled/default

Verificar la Configuración de Nginx:
Antes de reiniciar Nginx, verifica si hay errores en la configuración:

Bash

sudo nginx -t

Si la salida indica syntax is ok y test is successful, la configuración es válida.

Reiniciar Nginx: Aplica los cambios reiniciando el servicio Nginx:

Bash

sudo systemctl restart nginx

Acceder al Sitio Web:
Abre tu navegador web y navega a http://midominio.com (si has configurado tu DNS correctamente) o a la dirección IP de tu servidor.

Deberías ver el contenido del archivo index.html que creaste.

Parte 3: Configuración Adicional Común

Servir Contenido Estático: La configuración básica ya maneja el servicio de archivos HTML, CSS, JavaScript e imágenes. Puedes optimizar el rendimiento configurando la caché del navegador y la compresión gzip.

Ejemplo de Configuración para Contenido Estático (dentro del bloque server):

Nginx

      location ~* \.(?:jpg|jpeg|gif|png|ico|cur|css|js|txt|xml|swf|flv|mp4|webm|ogg|ogv|eot|woff|woff2|ttf|svg)$ {

      expires 30d;

      access_log off;

      add_header Cache-Control public;

}



gzip on;

gzip_vary on;

gzip_proxied any;

gzip_comp_level 6;

gzip_buffers 16 8k;

gzip_http_version 1.1;

gzip_types text/plain text/css application/json application/javascript application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml;

Proxy Inverso: Nginx se utiliza a menudo como proxy inverso para reenviar solicitudes a otros servidores (por ejemplo, servidores de aplicaciones como Node.js o Python/Django).

Ejemplo de Configuración de Proxy Inverso (dentro del bloque server):

Nginx


location /api/ {

        proxy_pass http://127.0.0.1:3000; # La dirección y el puerto de tu aplicación

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

}

Redirecciones 1 HTTP a HTTPS: Para mejorar la seguridad, es común redirigir todo el tráfico HTTP al puerto HTTPS (443). Esto requiere tener un certificado SSL/TLS configurado.  

Ejemplo de Redirección (crea un bloque server adicional):

Nginx


server {

     listen 80;

     listen [::]:80;

     server_name midominio.com www.midominio.com;

     return 301 https://$host$request_uri;

}



server {

      listen 443 ssl http2;

      listen [::]:443 ssl http2;

      server_name midominio.com www.midominio.com;



      # Configuración del certificado SSL

       ssl_certificate /etc/ssl/certs/midominio.com.crt;

       ssl_certificate_key /etc/ssl/private/midominio.com.key;



       # Más configuración para HTTPS...

}

Balanceo de Carga:
Nginx puede distribuir el tráfico entre múltiples instancias de una aplicación para mejorar la disponibilidad y el rendimiento.

Ejemplo de Balanceo de Carga (fuera de los bloques server):

Nginx


upstream backend {

        server backend1.example.com;

        server backend2.example.com;

        server backend3.example.com weight=5; # Asigna más peso a un servidor

}



server {

       listen 80;

       server_name midominio.com;

       location / {

              proxy_pass http://backend;

}

}

Parte 4: Resolución de Problemas Comunes

Nginx No se Inicia o Falla al Reiniciar:


Verificar la Sintaxis de la Configuración: Siempre ejecuta sudo nginx -t para verificar la configuración antes de reiniciar.

Revisar los Logs de Error de Nginx: Los logs de error suelen estar ubicados en /var/log/nginx/error.log. Contienen información detallada sobre los problemas.

Problemas de Puerto en Uso: Asegúrate de que ningún otro servicio esté utilizando los puertos 80 o 443. Puedes usar sudo netstat -tulnp | grep ':80' o sudo netstat -tulnp | grep ':443'.

El Sitio Web No se Muestra:

Verificar la Configuración del Bloque del Servidor: Asegúrate de que server_name, listen y root estén configurados correctamente para tu dominio.

Problemas de Firewall: Asegúrate de que el tráfico en los puertos 80 y 443 esté permitido por tu firewall.

Errores en try_files: Revisa la configuración de try_files en los bloques location.

Problemas de Permisos en el Directorio Raíz: Asegúrate de que el usuario de Nginx (generalmente www-data o nginx) tenga permisos de lectura en el directorio raíz y en los archivos del sitio web.

Errores con PHP-FPM


Verificar el Estado de PHP-FPM: Asegúrate de que PHP-FPM esté en ejecución: sudo systemctl status php-fpm.

Verificar la Ruta del Socket de PHP-FPM: Asegúrate de que la directiva fastcgi_pass en el bloque location ~ \.php$ coincida con la configuración de tu socket de PHP-FPM (puede estar en /run/php/php-fpm.sock o una dirección IP y puerto).

Revisar los Logs de PHP-FPM: Los logs de PHP-FPM pueden contener información sobre errores al procesar scripts PHP.

Problemas con el Proxy Inverso

Verificar la Dirección del proxy_pass: Asegúrate de que la dirección y el puerto del servidor backend sean correctos.

Problemas de Firewall entre Nginx y el Backend: Asegúrate de que el firewall en el servidor Nginx permita las conexiones salientes al servidor backend y que el firewall en el servidor backend permita las conexiones entrantes desde el servidor Nginx.

Errores en los Headers del Proxy: Las directivas proxy_set_header son importantes para pasar información correcta al backend. Asegúrate de que estén configuradas adecuadamente.

Recuerda siempre verificar la sintaxis de la configuración con sudo nginx -t y revisar los logs de error para diagnosticar problemas. La documentación oficial de Nginx también es una excelente fuente de información. ¡Mucha suerte con tu configuración de Nginx!

Ads by CJ - Linux Foundation

Share This