Página 1 de 1

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

Publicado: 28 Jun 2016, 23:51
por Kike
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:

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

Publicado: 29 Jun 2016, 21:38
por Dragon.Kalos
muy bueno, me viene genial!!!!

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

Publicado: 29 Jun 2016, 22:09
por Kike
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

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

Publicado: 18 Ago 2016, 10:05
por Haru Ijima
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...

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

Publicado: 18 Ago 2016, 17:02
por Kike
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

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

Publicado: 18 Ago 2016, 23:11
por Haru Ijima
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