Sobes.tech
Middle

¿Qué hacer si al trabajar con nginx ocurre un fallo al superar las 1024 conexiones?

sobes.tech AI

Respuesta de la IA

Esto indica una limitación en la cantidad de descriptores de archivos abiertos.

Soluciones:

  1. Aumentar worker_connections en la configuración de Nginx:

    // Aumentar el número máximo de conexiones por proceso worker
    events {
        worker_connections 4096; // o más, dependiendo de las necesidades y recursos
    }
    
  2. Aumentar el límite de archivos abiertos a nivel del sistema operativo:

    • Para la sesión actual del usuario:
      # Aumentar temporalmente el límite de archivos abiertos
      ulimit -n 65536
      
    • Para todo el sistema (de forma permanente): Editar el archivo /etc/security/limits.conf. Agregar líneas:
      # Límites específicos del usuario
      nginx soft nofile 65536
      nginx hard nofile 65536
      
      # Alternativamente, para todos los usuarios
      # * soft nofile 65536
      # * hard nofile 65536
      
      (Reemplazar nginx por el nombre del usuario bajo el cual se ejecuta Nginx, si es diferente.) Es necesario reiniciar el sistema o volver a iniciar sesión para aplicar los cambios, o ejecutar sysctl -p.
  3. Verificar configuraciones globales del núcleo: Asegurarse de que fs.file-max sea suficientemente alto.

    # Verificar el valor actual
    cat /proc/sys/fs/file-max
    # Establecer un nuevo valor (temporalmente)
    # sudo sysctl -w fs.file-max=100000
    # Establecer un nuevo valor (de forma permanente) - editar /etc/sysctl.conf
    # Agregar la línea: fs.file-max = 100000
    # Aplicar cambios
    # sudo sysctl -p
    
  4. Asegurarse de que el usuario de Nginx tenga permiso para abrir tantos archivos: Verificar bajo qué usuario se ejecuta Nginx y qué límites están establecidos para ese usuario. Esto está relacionado con el punto 2.

  5. Reiniciar Nginx: Después de realizar cambios en la configuración de Nginx o en los límites del sistema, reiniciar Nginx.

    # Reiniciar Nginx
    sudo systemctl reload nginx
    # O, si no funciona
    # sudo systemctl restart nginx
    

Prioridad en la solución:

  1. Verificar y aumentar worker_connections.
  2. Verificar y aumentar los límites de descriptores de archivos para el usuario de Nginx.
  3. Verificar y aumentar el límite global fs.file-max.
  4. Reiniciar Nginx.

Es importante recordar que el aumento de límites debe estar justificado y estar en relación con los recursos disponibles del servidor (memoria, CPU). Valores demasiado altos pueden causar inestabilidad en el sistema.