Mejora Rendimiento de tu Web: NGINX como proxy estático Frontend + APACHE2 para contenido Dinámico

Sección Unicamente para Tutoriales y Guías
Responder
Avatar de Usuario
Kike
Administrador
Administrador
Mensajes: 2311
Registrado: 13 May 2016, 18:53
Ubicación: Islas Baleares - Menorca
Agradecido: 47 veces
Agradecimiento recibido: 175 veces
Contactar:

Muy buenas!

En este tutorial voy a enseñar a fusionar
NGINX como Proxy Estático ( Frontend )
+
Apache para servir contenido Dinámico (Backend)

apachenginx.png
apachenginx.png (16.35 KiB)
Nginx es un servidor HTTP muy ligero, rápido y eficiente y muy bien pensado para trabajar como proxy inverso, y no solo para HTTP, sino que también soporta SMTP.
La desventaja de NGINX es que tenemos que instalar el modulo FPM para trabajar con contenido dinámico.
Apache Consume más memoria y recursos , pero aprovecharemos su potencia para mover el contenido Dinamico, su veterania y más funcionalidades extra que las que incluye NGINX.


¿Que beneficios tenemos al combinar? Los principales son:
- Más seguridad: Al trabajar las peticiones PHP a través de Proxy inverso, mejoramos bastante la seguridad.
- Mas rendimiento: Usaremos lo mejor de cada uno para sacar lo máximo


Bueno vamos al grano!! :x

Primero debemos tener instalado
>>NGINX (BASICO) A TRAVES DE ESTE TUTORIAL<<

( No nos hará falta en este caso instalar PHP en NGINX , ya que APACHE lleva módulos independientes )

Una vez configurado, vamos a editar el archivo de configuración de nuestra Web NGINX [por defecto /etc/nginx/sites-available/default] ,
para ello pondremos en el terminal SSH el siguiente comando:

Código: Seleccionar todo

sudo nano /etc/nginx/sites-available/default
Ahora debemos añadir la configuración del Proxy , para que envie las peticiones del contenido PHP hasta APACHE.
Para ello pondremos esto:
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;
}
Explicacion: http://127.0.0.1:8080 conecta por Proxy LAN hasta Apache por el puerto 8080.(NO MODIFICAR!)

El archivo de configuración NGINX quedaria mas o menos asi:

Código: Seleccionar todo

server {
        listen 80 default_server;
server_name  www.miweb.com;
        root /var/www;
        index index.html index.htm;

        location / {
                try_files $uri $uri/ /index.html;
    }
     
        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;
}

}
Una vez añadido,guardaremos los cambios pulsando estas teclas, en este caso (putty ssh)
Control + X
tecleamos Y
ENTER


INSTALANDO APACHE:

Primero antes de nada, actualizamos Repositorios con:

Código: Seleccionar todo

sudo apt-get update
apa1.png
apa1.png (4.88 KiB)
Instalamos Apache2 con:

Código: Seleccionar todo

sudo apt-get install apache2
apa2.png
apa2.png (7.85 KiB)
CONFIGURANDO APACHE PARA RECIBIR PETICIONES BACKEND:

Vamos a editar el archivo:

Código: Seleccionar todo

sudo nano /etc/apache2/ports.conf
En las primeras lineas tendremos esto:

Código: Seleccionar todo

Listen 81
NameVirtualHost *:81
Lo modificamos y ponemos lo siguiente:

Código: Seleccionar todo

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080
apa3.png
apa3.png (5.5 KiB)
Una vez añadido,guardaremos los cambios del archivo pulsando estas teclas, en este caso (putty ssh)
Control + X
tecleamos Y
ENTER


Ahora editaremos la configuración del sitio web (por defecto /etc/apache2/sites-available/000-default.conf)

Código: Seleccionar todo

sudo nano /etc/apache2/sites-available/000-default.conf
Y aqui añadimos o modificamos lo siguiente marcado en Rojo y Lila, quedando asi la configuración:
<VirtualHost 127.0.0.1:8080>

ServerName www.ejemplo.com
ServerAdmin email@fororaspberry.es
DocumentRoot /var/www

<Directory "/var/www">
AllowOverride All
<IfModule sapi_apache2.c>
php_admin_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine on
</IfModule>
Order allow,deny
Allow from all
Require all granted


</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Explico lo más importante:
Configuramos para que reciba entradas por ese puerto y dirección
<VirtualHost 127.0.0.1:8080>
El nombre de nuestra Web con .WWW
ServerName www.ejemplo.com
La ruta donde esta ubicada nuestra Web
DocumentRoot /var/www
De nuevo indicando la ruta de nuestra Web , para activar todos los comandos dentro de <Directory>
<Directory "/var/www">
Ya estando todo configurado, guardaremos los cambios del archivo pulsando estas teclas, en este caso (putty ssh)
Control + X
tecleamos Y
ENTER[/i]

Instalamos módulos PHP si no los tiene:
Aqui he optado por instalar PHP5 y PHP7, por si queremos usar uno u otro (no interfieren en nada)

Podremos el comando:

Código: Seleccionar todo

sudo apt-get install php5 php7.0
apa4.png
apa4.png (6.51 KiB)
SI QUEREMOS USAR PHP5:

Código: Seleccionar todo

sudo a2dismod php7.0
sudo a2enmod php5
SI POR EL CONTRARIO QUEREMOS UTILIZAR PHP7.0

Código: Seleccionar todo

sudo a2dismod php5
sudo a2enmod php7.0
YA ESTAMOS APUNTO!! Solo queda reinicar los cambios y comprobar que estamos utilizando el PHP con APACHE:

Código: Seleccionar todo

sudo service apache restart
sudo service nginx restart
Por ultimo probaremos que esta totalmente funcional, poniendo este index.php
en nuestra carpeta de la WEB (en nuestro caso , ruta /var/www/ )
DESCARGAR AQUI

Accedemos desde el navegador a nuestra Web ,a través de la IP
apa5.png

Y YA TENEMOS NUESTRO PROXY INVERSO FUNCIONANDO PERFECTAMENTE :P :P
Si os ha gustado y os ha servido , por favor comentarme o darme "Like" :) :) :)
Hasta pronto :mrgreen:
Si lo puedes soñar, lo puedes hacer
Dragon.Kalos
Pi Alpha
Pi Alpha
Mensajes: 11
Registrado: 16 May 2016, 17:35
Agradecido: 0
Agradecimiento recibido: 0

muy bueno, me viene genial!!!!
Avatar de Usuario
Kike
Administrador
Administrador
Mensajes: 2311
Registrado: 13 May 2016, 18:53
Ubicación: Islas Baleares - Menorca
Agradecido: 47 veces
Agradecimiento recibido: 175 veces
Contactar:

Dragon.Kalos escribió:muy bueno, me viene genial!!!!

Me alegro que te sirva, luego podemos modificar NGINX y APACHE a nuestro gusto para sacarle más partido (instalar módulos extra,conexiones máximas por IP, etc )
Si necesitas una mano aqui me tienes :D
Si lo puedes soñar, lo puedes hacer
Avatar de Usuario
Haru Ijima
Pi Beta
Pi Beta
Mensajes: 108
Registrado: 14 Jun 2016, 18:29
Ubicación: Granada
Agradecido: 0
Agradecimiento recibido: 1 vez
Contactar:

Tengo una pregunta... Yo siempre he trabajado con Apache, pero como ya te comenté son paquetes que tenían todo para instalar y usar (XAMPP O WAMP) así que de nginx ni idea... En el tuto de WordPress con nginx, por qué no se instala Apache también? Ya que si creo un WordPress con contenido dinámico, funciona sólo con PHP 7 instalado? No se si me explico...
Haru - Desarrollador de aplicaciones web

Código: Seleccionar todo

while (true) {
    echo 'Holiiiii';
}
[/size]
Avatar de Usuario
Kike
Administrador
Administrador
Mensajes: 2311
Registrado: 13 May 2016, 18:53
Ubicación: Islas Baleares - Menorca
Agradecido: 47 veces
Agradecimiento recibido: 175 veces
Contactar:

Haru Ijima escribió:Tengo una pregunta... Yo siempre he trabajado con Apache, pero como ya te comenté son paquetes que tenían todo para instalar y usar (XAMPP O WAMP) así que de nginx ni idea... En el tuto de WordPress con nginx, por qué no se instala Apache también? Ya que si creo un WordPress con contenido dinámico, funciona sólo con PHP 7 instalado? No se si me explico...
Buena pregunta, te explico.

Nginx por si solo, no es capaz de mover Contenido Dinámico , por eso mismo lo tenemos que complementar con el Modulo PHP-FPM (FastCGI Process Manager) para que pueda servir el contenido.

En cambio Apache si que es capaz de servirlo sin configuración previa ni Módulos.

En este tutorial (NGINX como proxy estático Frontend + APACHE2 para contenido Dinámico) lo que hacemos es combinar los dos para un mayor rendimiento y seguridad ( proxy inverso ) .
Conclusión de la Explicación: puedes utilizarlos por separado o combinarlos, el resultado será el mismo :victoria
Si lo puedes soñar, lo puedes hacer
Avatar de Usuario
Haru Ijima
Pi Beta
Pi Beta
Mensajes: 108
Registrado: 14 Jun 2016, 18:29
Ubicación: Granada
Agradecido: 0
Agradecimiento recibido: 1 vez
Contactar:

Kike escribió:
Haru Ijima escribió:Tengo una pregunta... Yo siempre he trabajado con Apache, pero como ya te comenté son paquetes que tenían todo para instalar y usar (XAMPP O WAMP) así que de nginx ni idea... En el tuto de WordPress con nginx, por qué no se instala Apache también? Ya que si creo un WordPress con contenido dinámico, funciona sólo con PHP 7 instalado? No se si me explico...
Buena pregunta, te explico.

Nginx por si solo, no es capaz de mover Contenido Dinámico , por eso mismo lo tenemos que complementar con el Modulo PHP-FPM (FastCGI Process Manager) para que pueda servir el contenido.

En cambio Apache si que es capaz de servirlo sin configuración previa ni Módulos.

En este tutorial (NGINX como proxy estático Frontend + APACHE2 para contenido Dinámico) lo que hacemos es combinar los dos para un mayor rendimiento y seguridad ( proxy inverso ) .
Conclusión de la Explicación: puedes utilizarlos por separado o combinarlos, el resultado será el mismo :victoria
:D Muchas gracias por la aclaración, la teoría la sabia pero no sabia en lo de WordPress como iba el asunto, gracias a ti y a toda la comunidad estoy aprendiendo un montón de cosas, a ver si tengo un rato y comparto también mis investigaciones :claroclaro
Haru - Desarrollador de aplicaciones web

Código: Seleccionar todo

while (true) {
    echo 'Holiiiii';
}
[/size]
Responder