Aumentar el rendimiento de tu web usando Nginx como proxy con Apache
¿Por qué correr Apache y Nginx juntos?
Tanto Nginx como Apache son dos servidores web potentes y eficaces. Apache es el servidor que más usado actualmente, Nginx , desde su lanzamiento público en 2006, es ahora el segundo servidor web más usado . Las razones de la popularidad de cada respectivo servidor son claras: el poder de Apache y velocidad de nginx son bien conocidos. Sin embargo, ambos servidores tienen inconvenientes: Apache es consume demasiada memoria del servidor, mientras que Nginx necesita la ayuda de php-FPM o módulos similares para servir contenido dinámico. Sin embargo, podemos combinar los dos servidores para conseguir el máximo rendimiento, con Nginx como servidor estático en el front-end y Apache se encargará del procesamiento dinámico en backend.
Requerimiento inicial
Para llevar a cabo los pasos de este tutorial, debes tener privilegios de sudo en tu VPS.
Instalando Nginx
Para empezar, tenemos que instalar y configurar Nginx que servirá el front-end de nuestro sitio. Vamos a descargarlo e instalarlo desde apt-get:
sudo apt-get install nginx
Una vez que se ha descargado e instalado ya podemos seguir con el siguiente paso.
Configuración de Nginx
Abre la configuración de Nginx.
sudo nano /etc/nginx/sites-available/ejemplo
La siguiente configuración permitirá usar Nginx como servidor front-end . Es muy similar a la configuración por defecto, y los detalles se encuentran bajo la configuración.
server { listen 80; root /var/www/; index index.php index.html index.htm; server_name ejemplo.com; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ /\.ht { deny all; } }
Los siguientes cambios han sido implementados en la configuración:
- Cambiamos la raíz ( root) por el directorio correcto de la Web.
- Añadimos index.php a la línea de índice ( index ).
- try_files intentará de servir cualquier página solicitada por los visitantes. Si nginx no puede servirla, el archivo se pasa al proxy.
- PROXY_PASS indica a Nginx la dirección del servidor proxy.
- Por último, el bloque de localización "location ~ /\.ht {"deniega el acceso a los ficheros . htaccess, si la raíz ( document root ) de Apache concuerda con la de Nginx.
Esta configuración establece un sistema por el cual t odas las peticiones con un final .php se redireccionan al backend Apache que está corriendo en el puerto 8080. Ahora debes activar el VirtualHost:
sudo ln -s /etc/nginx/sites-available/ejemplo /etc/nginx/sites-enabled/ejemplo
Además, debes eliminar sitio que Nginx trae por defecto:
sudo rm /etc/nginx/sites-enabled/default
El siguiente paso es instalar y configurar Apache.
Instalar Apache
Una vez hemos acabado con la parte de Nginx, es el momento de instalar nuestro backend, Apache.
sudo apt-get install apache2
Puesto que nginx todavía no está activado, Apache comenzará a funcionar en el puerto 80.
Configurar Apache
Necesitamos configurar apache para que pueda hacerse cargo del backend , que como ya le indicamos a Nginx, nuestro proxy deberá estar corriendo en el puerto 8080. Debemos abrir el fichero ports.conf de Apache para indicar el puerto correcto:
sudo nano /etc/apache2/ports.conf
Busca y cambia las siguientes líneas para tener Apache corriendo en el puerto 8080 , y accesible sólo desde el localhost:
NameVirtualHost 127.0.0.1:8080 Listen 127.0.0.1:8080
Guarda y sal. Posteriormente, abre un nuevo archivo de Virtual Host, copiando el diseño del que trae apache por defecto:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ejemplo sudo nano /etc/apache2/sites-available/ejemplo
El principal problema que debemos solucionar aquí es que el Virtual Host tiene que estar , una vez más , ejecutándose en el puerto 8080 (en lugar del predeterminado 80). La línea debe tener este aspecto:
Asegúrate de que la raíz (Document Root) es la correcta. Guarda y sal del archivo y activa el Virtual Host:
sudo a2ensite ejemplo
Antes de empezar a probar nada, tenemos que equipar a Apache con PHP. Vamos a instalarlo:
sudo apt-get install php5
Reinicia ambos servidores para que los cambios surtan efecto:
sudo service apache2 restart sudo service nginx restart
Finalizando
Ya tenemos listo nuestro VPS ( o servidor dedicado ) con Nginx ejecutándose como front-end de nuestro sitio y con el procesamiento de Apache + PHP como back-end. Si abrimos nuestro dominio nos llevará a la página por defecto de nuestro sitio. Podemos comprobar que la información está siendo enviada a Apache de forma correcta mediante la ejecución de un script php común. Vamos a crear el archivo php.info:
sudo service apache2 restart sudo nano /var/www/info.php
Pega las siguientes líneas en el archivo:
sudo service apache2 restart
Guarda y sal. Visita a tu dominio/info.php y deberás ver la pantalla PHP info, podrás observar que fue servida con Apache.
Conclusiones
Configurar Nginx y Apache juntos puede ser un gran impulso para tu servidor y para tu sitio web . Esto solo ha sido una breve introducción pero se puede afinar todo mucho más para aumentar el rendimiento con creces.