Nginx

Proxy inverso de Nginx

Proxy inverso de Nginx

Que es un proxy inverso?

Un servidor proxy es el que se comunica con Internet en su nombre. Por ejemplo, si la red de su universidad ha bloqueado https: // www.Facebook.com / pero el dominio https: // exampleproxy.com todavía es accesible, luego puede visitar este último y reenviará todas sus solicitudes de servidores de Facebook a Facebook, y enviará las respuestas de Facebook a su navegador.

En resumen, un proxy envía solicitudes en nombre de uno o más clientes a cualquier servidor en Internet. Un proxy inverso se comporta de manera similar.

A proxy inverso recibe solicitudes de todos y cada uno de los clientes en nombre de uno o más servidores. Entonces, si tiene un par de servidores que alojan ww1.ejemplo.com y ww2.ejemplo.com un servidor proxy inverso puede aceptar solicitudes en nombre de los dos servidores, reenviar esas solicitudes a sus respectivos puntos finales donde se genera la respuesta y se envía de vuelta al proxy inverso para ser reenviada a los clientes.

La puesta en marcha

Antes de comenzar a ajustar los archivos de configuración de Nginx y hacer un servidor proxy inverso. Quiero grabar en piedra cómo se ve mi configuración, por lo que cuando intentas implementar tu diseño, sería menos confuso.

Usé la plataforma de DigitalOcean para activar tres VPS. Todos están en la misma red, cada uno con su propia IP privada, y solo un VPS tiene una IP pública estática (este será nuestro servidor proxy inverso.)

VM / nombre de host IP privada IP pública Papel
Proxy inverso 10.135.123.187 159.89.108.14 Proxy inverso, ejecutando Nginx
Nodo-1 10.135.123.183 N / A Ejecución del primer sitio web
Nodo-2 10.135.123.186 N / A Ejecución de un segundo sitio web

Los dos sitios web diferentes que se ejecutan tienen nombres de dominio ww1.ranvirslog.com y ww2.ranvirslog.com y ambos registros A apuntan a la IP pública del proxy inverso, yo.e, 159.89.108.14

La idea detrás de la IP privada es que las tres VM pueden comunicarse entre sí a través de esta IP privada, pero un usuario remoto solo puede acceder a la VM del proxy inverso en su IP pública. Esto es importante tenerlo en cuenta. Por ejemplo, no puede ingresar a ninguna de las VM usando su IP privada.

Además, tanto el Nodo-1 como el Nodo-2 tienen un servidor web Apache que sirve a dos páginas web distintas. Esto nos ayudará a distinguir unos de otros.

El primer sitio web dice "EL SITIO WEB 1 FUNCIONA!!!"

Del mismo modo, el segundo sitio web muestra esto:

Sus sitios web pueden diferir, pero si desea replicar esta configuración como punto de partida, ejecute apt install apache2 en Node-1 y Node-2. Luego edite el archivo / var / www / html / index.html para que el servidor web diga lo que quieras que diga.

La VM con proxy inverso aún no se ha modificado. Todas las máquinas virtuales ejecutan Ubuntu 18.04 LTS, pero puede utilizar cualquier otro sistema operativo que desee. Incluso puede emular esto usando contenedores Docker. Al crear una red puente Docker definida por el usuario y generar contenedores en ella, puede asignar a cada contenedor una IP privada y reenviar todo el proxy HTTP / HTTPS a un contenedor, que sería nuestro contenedor de proxy inverso Nginx.

Hasta aquí todo bien.

Configuración predeterminada de Nginx

Comencemos instalando Nginx en el servidor proxy inverso, estoy usando Ubuntu, por lo que apt es mi administrador de paquetes:

$ sudo apt install nginx

Eliminar la configuración predeterminada si está utilizando una distribución basada en Debian

Antes de continuar, una pequeña nota sobre la configuración de Nginx. Todos los archivos de configuración se almacenan en / etc / nginx, incluido el nginx.conf archivo que es el archivo de configuración principal. Si miramos el contenido de este archivo (dentro del bloque http), notará las siguientes dos líneas:

..
incluir / etc / nginx / conf.D/*.conf;
incluir / etc / nginx / sites-enabled / *;
..

La segunda línea incluye todos los archivos en el directorio habilitado para sitios para la configuración de Nginx. Esta es la práctica estándar en la mayoría de las distribuciones basadas en Debian. Por ejemplo, la página web predeterminada "Bienvenido a Nginx" tiene un archivo correspondiente llamado predeterminado en la ubicación / etc / nginx / sites-available / default con un enlace simbólico a / etc / nginx / sites-enabled /, pero no lo necesitamos. página web predeterminada para que podamos eliminar de forma segura el enlace simbólico. El original todavía está disponible en el directorio de sitios disponibles.

$ rm / etc / nginx / sites-enabled / default

Pero cuando creemos una configuración de proxy inverso, lo haremos en conf.d directorio (con nuestro nombre de archivo con un .conf extensión) esto es universal, y funciona en todas las distribuciones, no solo en Debian o Ubuntu.

Eliminando la configuración predeterminada para otras distribuciones

Si no está utilizando una distribución basada en Debian, encontrará el valor predeterminado Pagina de bienvenida configuración en / etc / nginx / conf.d / predeterminado.conf simplemente mueva el archivo a un lugar seguro si desea usarlo en el futuro (ya que este no es un enlace simbólico)

$ mv / etc / nginx / conf.d / predeterminado.conf ~ / predeterminado.conf

A veces se puede encontrar en / etc / nginx / default.d porque la gente simplemente no puede ponerse de acuerdo sobre un único estándar simple! Así que tendrías que investigar un poco en el directorio / etc / nginx para averiguarlo.

Adición de bloques de proxy inverso

Como se indicó anteriormente, los dos nombres de dominio diferentes que estoy alojando detrás de este proxy son

  1. ranvirslog.com (SITIO WEB 1) con IP 10.135.123.183
  2. ranvirslog.com (SITIO WEB 2) con IP 10.135.123.186

Así que creemos un archivo por sitio web en / etc / nginx / conf.d / carpeta. Entonces estamos bien organizados.

$ touch / etc / nginx / conf.d / ww1.conf
$ touch / etc / nginx / conf.d / ww2.conf

Puede nombrar los archivos como desee, siempre que tenga un .conf al final de su nombre.

En el primer archivo ww1.conf agregue las siguientes líneas:

servidor
escucha 80;
escuchar [::]: 80;
 
nombre_servidor ww1.ranvirslog.com;
 
localización /
proxy_pass http: // 10.135.123.183 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

Las declaraciones de escucha le dicen a Nginx que escuche en el puerto 80 para casos de IPv4 e IPv6. Luego comprueba si el nombre_servidor es ww1.ranvirslog.com, el bloque de ubicación se activa y envía la solicitud a http: // 10.135.123.183 / con búfer desactivado. Además, la línea proxy_set_header… asegura que la IP original del cliente se reenvíe al servidor proxy. Esto es útil en caso de que desee calcular el número de visitantes únicos, etc. De lo contrario, el servidor proxy solo tendría un visitante: el servidor Nginx.

La opción de almacenamiento en búfer y las opciones set_header son completamente opcionales y solo se agregan para que el proxy sea lo más transparente posible. Para la ww2.ranvirslog.com, agregué la siguiente configuración en / etc / nginx / conf.d / ww2.conf:

servidor
escucha 80;
escuchar [::]: 80;
 
nombre_servidor ww2.ranvirslog.com;
 
localización /
proxy_pass http: // 10.135.123.186 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

Guarde ambos archivos y pruebe si la configuración general es válida o no:

$ sudo nginx -t

Si hay errores, el resultado del comando anterior lo ayudará a encontrarlos y corregirlos. Ahora reinicie el servidor:

$ service nginx reiniciar

Y puede probar si funcionó o no visitando los diferentes nombres de dominio en su navegador y viendo el resultado.

Conclusión

El caso de uso de cada individuo es diferente. La configuración mencionada anteriormente puede necesitar algunos ajustes para que funcione en su escenario. Tal vez esté ejecutando varios servidores en el mismo host, pero en diferentes puertos, en ese caso la línea proxy_pass… tendrá http: // localhost: portNumber / como su valor.

Estos detalles dependen mucho de su caso de uso. Para obtener más detalles sobre otras opciones y modificables, consulte los documentos oficiales de Nginx.

5 mejores juegos de arcade para Linux
Hoy en día, las computadoras son máquinas serias que se usan para jugar. Si no puede obtener la nueva puntuación más alta, sabrá a qué me refiero. En ...
Batalla por Wesnoth 1.13.6 Desarrollo liberado
Batalla por Wesnoth 1.13.6 lanzado el mes pasado, es el sexto lanzamiento de desarrollo en el 1.13.x y ofrece una serie de mejoras, sobre todo en la i...
Cómo instalar League Of Legends en Ubuntu 14.04
Si eres fanático de League of Legends, esta es una oportunidad para que pruebes League of Legends. Tenga en cuenta que LOL es compatible con PlayOnLin...