Comparing version 0.10.16 to 0.11.9
@@ -1,10 +0,26 @@ | ||
# ZEN-proxy | ||
ZEN-proxy | ||
========= | ||
Es el modulo de ZEN destinado a tareas de reverse-proxy y balanceo de carga. Actualmente existen opciones maduras como pueden ser [NGINX](http://nginx.org/) o [HAPROXY](http://www.haproxy.org/) pero estas no funcionan bajo NodeJS. En el caso de que quieras tener tu propio proxy corriendo sobre la plataforma de NodeJS te recomendamos que utilices ZENproxy al igual que [ZENserver](https://github.com/soyjavi/zen-server) su premisa es la sencillez y el rendimiento. A diferencia con este último no necesitaremos programar ninguna linea de código puesto que toda la lógica estará definida en el fichero de configuración `zen.yml` | ||
Es el modulo de ZEN destinado a tareas de reverse-proxy y balanceo de carga. | ||
Actualmente existen opciones maduras como pueden ser [NGINX][1] o [HAPROXY][2] | ||
pero estas no funcionan bajo NodeJS. En el caso de que quieras tener tu propio | ||
proxy corriendo sobre la plataforma de NodeJS te recomendamos que utilices | ||
ZENproxy que, al igual que [ZENserver][3], su premisa es la sencillez y el | ||
rendimiento. A diferencia con este último, no necesitaremos programar ninguna | ||
linea de código puesto que toda la lógica estará definida en el fichero de | ||
configuración `zen.yml` | ||
## 1. Inicio | ||
[1]: <http://nginx.org/> | ||
[2]: <http://www.haproxy.org/> | ||
[3]: <https://github.com/soyjavi/zen-server> | ||
1. Inicio | ||
--------- | ||
### 1.1 Instalación | ||
Para instalar una nueva instancia de ZENproxy únicamente tienes que ejecutar el comando: | ||
Para instalar una nueva instancia de ZENproxy únicamente tienes que ejecutar el | ||
comando: | ||
@@ -15,5 +31,14 @@ ``` | ||
De esta manera tendrás todo lo necesario para comenzar con tu proyecto. Otra manera, algo más rudimentaria, es modificar el fichero `package.json` incluyendo esta nueva dependencia: | ||
El siguiente paso es crear el fichero zen.yml que contendrá la configuracion del | ||
proxy y el fichero zen.js con el siguiente contenido: | ||
``` | ||
"use strict" | ||
require('zenproxy').start(); | ||
``` | ||
Otra manera, algo más rudimentaria, es modificar el fichero `package.json` | ||
incluyendo esta nueva dependencia: | ||
``` | ||
{ | ||
@@ -24,3 +49,3 @@ "name" : "zen-proxy-instance", | ||
"zenproxy" : "*" }, | ||
"scripts" : {"start": "node zen.js"}, | ||
"scripts" : {"start": "node zen.js zen"}, | ||
"engines" : {"node": "*"} | ||
@@ -30,6 +55,21 @@ } | ||
### 1.2 Configuración básica | ||
Uno de los beneficios de usar ZEN es que el fichero de configuración (`zen.yml`) cobra una gran importancia a la hora de configurar el proxy y balancer. Vamos a ir analizando cada una de las opciones que nos permite establecer el fichero `zen.yml`: | ||
### 1.2 Arranque | ||
El proxy se ejecua mediante el siguiente comando: | ||
``` | ||
$ node zen.js zen | ||
``` | ||
O en su defecto, el nombre del fichero *.js* y el fichero *.yml* que hayas | ||
creado. | ||
### 1.3 Configuración básica | ||
Uno de los beneficios de usar ZEN es que el fichero de configuración (`zen.yml`) | ||
cobra una gran importancia a la hora de configurar el proxy y balancer. Vamos a | ||
ir analizando cada una de las opciones que nos permite establecer el fichero | ||
`zen.yml`: | ||
``` | ||
protocol: http # or https | ||
@@ -39,12 +79,19 @@ host : localhost | ||
timezone: Europe/Amsterdam | ||
timeout : 60 | ||
timeout : 2000 # ms | ||
``` | ||
Esta sección te permite establecer la configuración general de tu ZENproxy; el **protocolo** que vas a utilizar (`http` o `https`), el **nombre** del host, **puerto**, **zona horaria** y el **timeout** máximo para cada respuesta. | ||
Esta sección te permite establecer la configuración general de tu ZENproxy; el | ||
**protocolo** que vas a utilizar (`http` o `https`), el **nombre** del host, | ||
**puerto**, **zona horaria** y el **timeout** máximo para cada respuesta. | ||
## 2. Reglas | ||
2. Reglas | ||
--------- | ||
### 2.1 Configuración básica | ||
Una vez tengas la configuración básica solo nos queda configurar las reglas de nuestro proxy. Para ello utilizaremos crearemos un atributo `rules` en nuestro fichero `zen.yml` e iremos incluyendo cada una de ellas. Comencemos con nuestra primera regla: | ||
Una vez tengas la configuración básica solo nos queda configurar las reglas de | ||
nuestro proxy. Para ello utilizaremos crearemos un atributo `rules` en nuestro | ||
fichero `zen.yml` e iremos incluyendo cada una de ellas. Comencemos con nuestra | ||
primera regla: | ||
``` | ||
@@ -62,13 +109,22 @@ rules: | ||
Esta sería la regla más sencilla que podemos configurar en ZENproxy, veamos cada uno de sus atributos: | ||
Esta sería la regla más sencilla que podemos configurar en ZENproxy, veamos cada | ||
uno de sus atributos: | ||
+ **name**: El nombre de la regla | ||
+ **domain**: Dominio que quieres que controle el proxy | ||
+ **query**: Url del dominio | ||
+ **hosts**: Servidor (o servidores) a los que tiene que acceder cuando se ejecute la regla. | ||
- **name**: El nombre de la regla | ||
- **domain**: Dominio que quieres que controle el proxy | ||
- **query**: Ruta que quieres controlar | ||
- **hosts**: Servidor (o servidores) a los que tiene que acceder cuando se | ||
ejecute la regla. | ||
### 2.1 Estrategia de balanceo | ||
Como ves es muy sencillo, y habrás podido deducir que en el atributo **hosts** si estableces más de un servidor ZENproxy actuará automáticamente como un balanceador. Como estrategia de balanceo utiliza *random* en el caso de que quisieses utilizar la famosa estrategia *RoundRobin* simplemente tienes que especificarlo en la regla: | ||
Como ves es muy sencillo, y habrás podido deducir que en el atributo **hosts** | ||
si estableces más de un servidor ZENproxy actuará automáticamente como un | ||
balanceador. Por defecto, como estrategia de balanceo, utiliza *random* en el | ||
caso de que quisieses utilizar la famosa estrategia *RoundRobin* simplemente | ||
tienes que especificarlo en la regla: | ||
``` | ||
@@ -81,6 +137,8 @@ rules: | ||
### 2.2 URLs con expresiones regulares | ||
Al comienzo de este capitulo vimos que podíamos establecer una url específica por medio del atributo `query`. Por ejemplo si quisieramos controlar la url *http://dominio.es/users* deberíamos hacer una configuración tal que asi: | ||
Al comienzo de este capitulo vimos que podíamos establecer una url específica | ||
por medio del atributo `query`. Por ejemplo si quisieramos controlar la url | ||
*http://dominio.es/users* deberíamos hacer una configuración tal que asi: | ||
``` | ||
@@ -90,7 +148,8 @@ ... | ||
domain : dominio.es | ||
query : /users | ||
... | ||
query : /users | ||
... | ||
``` | ||
En el caso de que queramos controlar urls más complejas podemos utilizar *regular expresions* para ello, veamos un ejemplo: | ||
En el caso de que queramos controlar urls más complejas podemos utilizar | ||
*regular expresions* para ello, veamos un ejemplo: | ||
@@ -104,7 +163,14 @@ ``` | ||
``` | ||
En este ejemplo ZENproxy ejecutará la regla cuando la url comience por *http://dominio.es/regex/prefix-*. Esta funcionalidad puede ser muy util por ejemplo | ||
En este ejemplo ZENproxy ejecutará la regla cuando la url comience por | ||
*http://dominio.es/regex/prefix-*. Esta funcionalidad puede ser muy util por | ||
ejemplo | ||
### 2.3 Subdominios | ||
Si quieres controlar un determinado subdominio solo tienes que hacer uso del atributo `subdomain`, obvio. Esto puede ser muy util si en tu estrategia de balanceo quieres que a un determinado subdominio un grupo específico de máquinas. Veamos como quedaría: | ||
Si quieres controlar un determinado subdominio solo tienes que hacer uso del | ||
atributo `subdomain`, obvio. Esto puede ser muy útil si en tu estrategia de | ||
balanceo quieres que a un determinado subdominio controle un grupo específico de | ||
máquinas. Veamos como quedaría: | ||
``` | ||
@@ -120,3 +186,3 @@ rules: | ||
port : 1983 | ||
- name : mysubdomain | ||
@@ -131,6 +197,9 @@ domain : domain.com | ||
### 2.4 Bloqueo de IPTables | ||
Otra opción muy interesante es el bloqueo IPTables cuando ZENproxy y los servidores de respuesta están ejecutandose en la misma máquina. Por ejemplo, tenemos nuestro dominio.es que va a acceder a dos instancias NodeJS que se ejecutan en la misma máquina en los puertos `1980` y `1983`: | ||
Otra opción muy interesante es el bloqueo IPTables cuando ZENproxy y los | ||
servidores de respuesta están ejecutandose en la misma máquina. Por ejemplo, | ||
tenemos nuestro *dominio.es* que va a acceder a dos instancias NodeJS que se | ||
ejecutan en la misma máquina en los puertos `1980` y `1983`: | ||
``` | ||
@@ -148,3 +217,6 @@ rules: | ||
Si no tienes bloqueados los puertos 1980 y 1983, cualquier usuario podría acceder a *http://dominio.es:1980* (o 1983) puesto que esos puertos están visibles. Para que ZENproxy bloquee automáticamente estos puertos solo tienes que utilizar el atributo `block`: | ||
Si no tienes bloqueados los puertos 1980 y 1983, cualquier usuario podría | ||
acceder a *http://dominio.es:1980* (o 1983) puesto que esos puertos están | ||
visibles. Para que ZENproxy bloquee automáticamente estos puertos mediante | ||
reglas IPTables, solo tienes que utilizar el atributo `block`: | ||
@@ -157,5 +229,9 @@ ``` | ||
## 3. Servidor de archivos estáticos | ||
Por último vamos a aprender como crear un balanceador de recursos, sigue siendo igual de sencillo. Creamos una nueva nueva regla la cual controlará la url *http://127.0.0.1/files*: | ||
3. Servidor de archivos estáticos | ||
--------------------------------- | ||
Por último vamos a aprender como crear un balanceador de recursos, sigue siendo | ||
igual de sencillo. Creamos una nueva nueva regla la cual controlará la url | ||
*http://127.0.0.1/files*: | ||
``` | ||
@@ -182,4 +258,12 @@ - name : statics | ||
Como vemos cuando se ejecute la regla responderán las máquinas *localhost:1986* y *127.0.0.1:1987* por medio de la estrategia *RoundRobin*. En el caso de los ficheros estáticos, cada vez que se acceda a *http://127.0.0.1/files/css* se servirán los archivos contenidos en la ruta */assets/stylesheets* del directorio ZENproxy. | ||
Como vemos, cuando se ejecute la regla responderán las máquinas *localhost:1986* | ||
y *127.0.0.1:1987* por medio de la estrategia *RoundRobin*. En el caso de los | ||
ficheros estáticos, cada vez que se acceda a *http://127.0.0.1/files/css* se | ||
servirán los archivos contenidos en la ruta */assets/stylesheets* del directorio | ||
de tu host. En el atributo *folder*, es necesario especificar la ruta completa | ||
hasta ese directorio. | ||
Utilizando esta técnica puedes ahorrar latencia puesto que ZENproxy no tiene que pedir los ficheros estáticos a cada uno de los hosts, sino que el se ocupará de buscarlos. Evidentemente esta técnica solo es efectiva cuando tanto ZENproxy como los hosts se ejecutan en la misma maquina. | ||
Utilizando esta técnica puedes ahorrar latencia puesto que ZENproxy no tiene que | ||
pedir los ficheros estáticos a cada uno de los hosts, sino que el se ocupará de | ||
buscarlos. Evidentemente esta técnica solo es efectiva cuando tanto ZENproxy | ||
como los hosts se ejecutan en la misma maquina. |
{ | ||
"name": "zenproxy", | ||
"version": "0.10.16", | ||
"version": "0.11.9", | ||
"description": "Easy (but powerful) NodeJS Proxy/Balancer", | ||
@@ -5,0 +5,0 @@ "homepage": "http://twitter.com/soyjavi", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
20189