Cómo optimizar un servidor VPS Linux
Optimizar un servidor VPS es una de las tareas más importantes que debemos realizar después de contratar y empezar a configurar un servidor VPS, ya que de esto va a depender el rendimiento de los sitios web y aplicaciones que tengamos alojadas en el.
En esta guía del centro de ayuda, vamos a ver, paso a paso, los principales puntos donde debemos meter mano para conseguir que un servidor VPS Linux ofrezca el máximo rendimiento posible. Para los ejemplos vamos a utilizar como referencia uno de los servidores VPS Cloud de Raiola Networks con un sistema operativo Linux Debian o AlmaLinux, aunque la mayoría de comandos y conceptos son aplicables a cualquier distribución Linux.
Antes de empezar, es importante tener en cuenta que para seguir esta guía necesitas acceso por terminal SSH al servidor VPS como usuario root o con un usuario con permisos de sudo.
Antes de optimizar: comprobar los recursos disponibles
Antes de tocar la configuración del servidor, debemos comprobar el estado actual de los recursos. La razón es simple: un servidor VPS que va sobrado de recursos da margen para optimizar, pero un servidor VPS que va al límite de CPU y RAM no se va a arreglar tocando parámetros, sino ampliando recursos.
Para comprobar el uso de memoria RAM y SWAP podemos utilizar el siguiente comando:
free -hPara ver el uso de CPU, los procesos activos y la carga del sistema, recomendamos utilizar HTOP, una herramienta interactiva muy completa y de la cual ya hemos hablado en este sitio web.
htopSi HTOP no está instalado, podemos instalarlo con APT (Debian/Ubuntu):
apt install htopO con DNF (AlmaLinux/Rocky Linux):
dnf install htopComo regla general, si el servidor VPS está consumiendo de forma habitual más del 70% de la CPU o de la RAM, lo más recomendable es ampliar los recursos del servidor antes de seguir con las optimizaciones.
Antes de terminar este punto, queremos aclarar que hay que interpretar correctamente los datos, ya que en muchas ocasiones no se van a ver los mismos datos desde fuera del servidor VPS (desde tu área de clientes, por ejemplo) que usando un comando como “free” desde la terminal.
Elegir el stack web adecuado
El stack web es la combinación de servidor web, intérprete PHP y servidor de bases de datos que vamos a utilizar para servir nuestros sitios web, aunque en algunas ocasiones podemos añadir algunos servicios más al stack, como Memcached o Redis.
La elección de los componentes del stack influye directamente en el rendimiento del servidor VPS.
En los servidores VPS Cloud optimizados de Raiola Networks utilizamos el siguiente stack por defecto:
Intérprete PHP: PHP-FPM con selector de versión de PHP.
Base de datos: MariaDB como motor de base de datos.
Vamos a ver brevemente cada uno de estos componentes.
Nginx como proxy inverso para Apache
Esta es la configuración que utilizamos en los servidores VPS optimizados con RaiolaCP, ya que ofrece un equilibrio muy bueno entre rendimiento y compatibilidad.
Nginx se coloca por delante de Apache y se encarga de servir directamente todo el contenido estático (imágenes, CSS, JavaScript, HTML). Cuando hay que procesar PHP, Nginx reenvía la petición a Apache.
Las ventajas de esta configuración son:
Servir contenido estático de forma mucho más eficiente que Apache solo; esto incluye que los contenidos estáticos se sirvan más rápido y al mismo tiempo con un impacto menor en el consumo de recursos.
Mantener la compatibilidad con los archivos .htaccess, lo cual es importante para CMS como WordPress, Joomla o PrestaShop, sobre todo para usuarios sin conocimientos de administración de sistemas.
Permitir implementar cache de página directamente en Nginx, mucho más eficiente que cualquier plugin de cache instalado en el CMS.
PHP-FPM como intérprete PHP
PHP-FPM (FastCGI Process Manager) es el método más eficiente para ejecutar PHP en un servidor Linux. La principal ventaja de PHP-FPM es que se ejecuta de forma independiente del servidor web, lo que permite una mejor gestión de los recursos y una mayor estabilidad.
PHP-FPM también nos permite tener distintas versiones de PHP funcionando al mismo tiempo en el servidor, lo cual es muy útil cuando tenemos varios sitios web con requisitos diferentes.
Esto lo usamos en nuestros servidores VPS optimizados con RaiolaCP, ya que es la forma con la que podemos ofrecerles un selector de PHP a nuestros clientes.
MariaDB como base de datos
MariaDB es un fork de MySQL totalmente compatible que ofrece, en general, un rendimiento ligeramente superior y un desarrollo más activo.
No nos vamos a engañar, actualmente en entornos web y en entornos de hosting, se utiliza muchísimo más MariaDB que MySQL.
Optimizar la memoria SWAP en Linux
El SWAP es la memoria virtual que utiliza Linux cuando la memoria RAM física se satura. Configurar correctamente el SWAP es importante para evitar que el servidor se quede sin memoria en momentos de pico, pero también para evitar un uso excesivo del SWAP que pueda ralentizar el sistema.
Antes de hacer nada, podemos comprobar si el SWAP está activo con el siguiente comando:
swapon --showSi tras ejecutar el comando no obtenemos ninguna salida, el SWAP no está activo y debemos crearlo. Tienes una guía completa para activar el SWAP en otro artículo de nuestro centro de ayuda.
Una vez activo, podemos ajustar dos parámetros del kernel para que el SWAP se comporte de forma óptima.
Ajustar el swappiness
El swappiness es un valor entre 0 y 100 que define con qué agresividad utiliza Linux el SWAP en relación con la memoria RAM. El valor por defecto en la mayoría de distribuciones Linux es 60, pero en un servidor web este valor es demasiado alto.
Para servidores orientados a servir sitios web, recomendamos un valor de 30, lo que hace que Linux solo utilice SWAP cuando la memoria RAM esté casi llena.
Para cambiar el swappiness de forma permanente, ejecutamos el siguiente comando:
echo 'vm.swappiness=30' | sudo tee -a /etc/sysctl.conf sudo sysctl -pAjustar el vfs_cache_pressure
El parámetro vm.vfs_cache_pressure controla con qué velocidad libera Linux la cache del sistema de archivos. Es especialmente relevante en servidores que trabajan con muchos archivos, como los que alojan WordPress u otros CMS.
Como recomendación general:
Valor 10 para servidores dedicados con muchos recursos libres.
Valor 50 para la mayoría de servidores web con CMS.
Valor 200 para servidores con muy poca RAM disponible.
Para ajustar el valor a 50, que es lo recomendado para un servidor web con WordPress, ejecutamos:
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf sudo sysctl -pTen en cuenta que estos parámetros son avanzados y afectan al comportamiento del kernel Linux. Si no tienes claro cómo funcionan, recomendamos dejar los valores por defecto o solicitar ayuda a un profesional.
Optimizar el intérprete PHP
PHP es el componente del stack donde más se nota el impacto de las optimizaciones. Vamos a ver los puntos más importantes donde podemos llevar a cabo ajustes para optimizar al máximo su funcionamiento.
Ten en cuenta que la forma de ejecutar PHP importa, como ya vimos en el apartado stack. Lo ideal para aprovechar al máximo el rendimiento del interprete PHP es ejecutarlo mediante PHP-FPM o usando mod_lsapi si usamos LiteSpeed Web Server como servidor web.
Activar OPCache
OPCache es una extensión nativa de PHP que cachea el código PHP precompilado en memoria. Su activación es imprescindible en cualquier servidor web que ejecute PHP, ya que el rendimiento mejora de forma muy notable y no requiere configuración adicional.
En los servidores VPS optimizados con RaiolaCP, OPCache viene preconfigurado y activo desde el primer momento; sin embargo, en servicios de hosting de Raiola Networks que lleven cPanel, en algunas versiones de PHP debes activarlo tú mismo usando el selector de PHP de CloudLinux.
Configurar los límites del intérprete PHP
Los principales parámetros de PHP que debemos revisar y adaptar a nuestras necesidades son los siguientes:
memory_limit: define la memoria máxima que puede consumir un script PHP. Un valor recomendado para WordPress es entre 256M y 512M.
max_execution_time: tiempo máximo en segundos que puede tardar un script en ejecutarse. Recomendamos 300 segundos para uso normal.
max_input_time: tiempo máximo para procesar datos de entrada. Debe coincidir con max_execution_time.
max_input_vars: número máximo de variables que puede recibir el script. Recomendamos un valor entre 5000 y 10000.
post_max_size y upload_max_filesize: tamaño máximo de subida de archivos. Ajustar según las necesidades del proyecto.
Es importante no configurar el memory_limit con valores excesivamente altos (como 1024M o superiores), ya que esto reduce la cantidad de procesos PHP concurrentes que el servidor puede manejar y empeora el rendimiento bajo carga.
En los servidores VPS con RaiolaCP podemos configurar estos parámetros desde el panel de control o editando directamente el archivo php.ini. Si utilizas uno de los productos de alojamiento web con cPanel de Raiola Networks, todos estos ajustes los podrás hacer directamente desde la interfaz de cPanel con el selector de versiones de PHP de CloudLinux.
Optimizar MariaDB
La base de datos suele ser uno de los principales cuellos de botella en aplicaciones dinámicas como WordPress o WooCommerce. Para optimizar MariaDB recomendamos seguir estos pasos:
Dejar el servidor funcionando con su carga habitual durante al menos 24 horas.
Ejecutar el script MySQL Tuner para obtener recomendaciones específicas.
Aplicar los cambios recomendados de forma progresiva en el archivo de configuración my.cnf.
Para instalar y ejecutar MySQL Tuner podemos utilizar los siguientes comandos:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl perl mysqltuner.plLos parámetros más importantes que se suelen ajustar en MariaDB son:
innodb_buffer_pool_size: Es el parámetro con más impacto en el rendimiento. En un servidor dedicado a base de datos, suele asignarse entre el 50% y el 70% de la RAM disponible. Si la base de datos comparte servidor con el servidor web, debemos asignar un valor menor.
max_connections: número máximo de conexiones concurrentes. Un valor alto consume más RAM, por lo que recomendamos empezar con 150-200 y ajustar según las necesidades.
tmp_table_size y max_heap_table_size: tamaño de las tablas temporales en memoria. Aumentar este valor reduce el uso de tablas temporales en disco.
Antes de optimizar MariaDB a nivel servidor, es recomendable revisar las propias consultas de la aplicación y comprobar que las tablas tienen los índices adecuados. Un servidor de base de datos muy bien configurado no puede compensar una aplicación con consultas mal escritas y con tablas muy grandes sin sus índices correspondientes.
Ten cuidado cuando optimices un servidor MariaDB o MySQL donde hay varias aplicaciones conviviendo, ya que los parámetros que pueden ser buenos para un sitio web u aplicación, pueden ser malos para otras.
Configurar sistemas de cache
Los sistemas de cache son uno de los puntos que más impacto tienen en el rendimiento de un servidor VPS utilizado para alojar sitios web. Existen distintos niveles de cache que podemos implementar:
OPCACHE u OPCode Cache
Como hemos comentado anteriormente, OPCache cachea el código PHP precompilado en memoria. Su activación es imprescindible. No vamos a profundizar más en esta sección, ya que lo hemos explicado en el apartado donde hablamos de la optimización del intérprete PHP.
Cache de objetos (Memcached o Redis)
Permite cachear en memoria RAM el resultado de operaciones que impactan en el rendimiento y en la potencia de proceso. En CMS como WordPress, su uso reduce notablemente el número de consultas a MariaDB o MySQL.
En los servidores VPS optimizados con RaiolaCP, Memcached viene preinstalado y preconfigurado. Para activarlo en WordPress podemos utilizar plugins como W3 Total Cache, LiteSpeed Cache o Memcached Redux.
Para comprobar si Memcached está activo en el servidor podemos utilizar el siguiente comando:
systemctl status memcachedCache de página
Es el nivel de cache que más impacto tiene sobre la velocidad de carga y por eso hemos decidido mencionarlo el último, ya que sirve directamente el HTML ya generado sin tener que ejecutar PHP ni consultar la base de datos. Si quieres saber exactamente cómo funciona, le hemos dedicado un artículo en este mismo centro de ayuda.
Podemos implementarlo de dos formas:
Con un plugin del CMS: como WP Rocket, W3 Total Cache o LiteSpeed Cache para WordPress.
A nivel servidor con Nginx: utilizando fastcgi_cache o la cache de proxy inverso. Es más eficiente que cualquier plugin, pero requiere conocimientos técnicos para configurarlo.
En los servidores VPS optimizados de Raiola Networks, la cache de página de Nginx viene preconfigurada y lista para usar. Esta es una de las razones por las que estos servidores soportan picos de tráfico muy altos sin necesidad de ampliar recursos.
Configuración de seguridad básica
Aunque la seguridad no es el objetivo principal de esta guía, es importante recordar que un servidor inseguro acaba teniendo problemas de rendimiento por ataques de fuerza bruta, bots descontrolados o intentos de explotación de rutas y vulnerabilidades, por lo que desde Raiola Networks como mínimo recomendamos:
Instalar y configurar CSF como firewall, junto con LFD para detectar intentos de fuerza bruta.
Deshabilitar el acceso SSH directo con el usuario root y utilizar siempre autenticación por clave pública.
Mantener el sistema operativo y todos los servicios actualizados.
Configurar Fail2ban como alternativa a CSF si la distribución no es compatible.
Álvaro Fontela
Consultor WordPress, además de CEO y cofundador de Raiola Networks. Autor del libro "Curso Práctico de WordPress" y speaker en congresos de marketing digital.
Autor
¿Te gusta nuestro contenido?
Si quieres ser el primero en leer nuestro contenido y enterarte de nuestras noticias.
HOSTING SSD desde 8,95€
Haz clic aquí¿Te ayudamos?
Escríbenos si tienes dudas o necesitas una solución específica
Categorías
Destacados