Un avance muy importante de la web moderna ha sido la creación y aplicación de WebSockets, que es una tecnología usada para hacer aplicaciones web real-time, en el caso de Mejorando.la es muy utilizada para los sistemas de notas y logs en su plataforma Platzi, mejorando considerablemente el rendimiento a comparación de sistemas con peticiones HTTP comunes.
WebSocket
Según Wikipedia:
Wikipedia :
Los WebSockets están íntimamente ligados a HTML5, y la mayoría de los navegadores actuales tiene soporte oficial para WebSockets.
El problema
La mayoría de los servidores web no manejan directamente los WebSockets, y más con la frecuencia con la que se actualizan (en el caso de Apache), por lo tanto se necesitan herramientas externas para la traducción de estas peticiones hacia el destino correcto.Nginx y los WebSockets
La empresa Nginx anunció en el 2013, que a a partir de la versión 1.3 de Nginx tendría soporte oficial para WebSockets, por lo tanto no se necesita una herramienta externa si se usa la versión 1.3 o superior.Configuración de WebSockets
Antes de configurar el soporte de WebSockets en Nginx, hay que tener una aplicación que responda a las peticiones; estas aplicaciones pueden ser escritas en Python (Tornado), NodeJS (Socket.IO), Ruby (Rails).
Punto siguiente es realizar la configuración del proxy en Nginx, comenzando por upstream (Nuestra app).
Código :
# La aplicación que resolverá todas las peticiones upstream miapp { server localhost:3000; }
Y por último configuramos nuestro server, para que escuche el puerto y el dominio que deseamos, tomando en cuenta la re-dirección de las peticiones de contenido dinámico hacia nuestro upstream "miapp".
Código :
server { listen 80; server_name cristalab.com; root /var/www/cristalab; index index.html index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://miapp; # Aquí comienza el soporte a WebSockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Aquí termina proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } }
Nginx + SSL + WebSockets
Si necesitamos conexión segura entre nuestros clientes y el servidor debemos instalar nuestro certificado SSL, el principal cambio es que no se escucha el puerto 80 para conexiones seguras sino el puerto 443, cambiando así la forma de nuestro server.
Código :
server { listen 80; # Puerto 443 en vez del puerto 80 listen 443 default ssl; server_name cristalab.com; root /var/www/cristalab; index index.html index.html; # Configuración para llaves SSL ssl on; ssl_certificate /srv/ssl/nginx.pem; ssl_certificate_key /srv/ssl/nginx.key; # Se redirecciona toda petición del puerto 80 al 443 if ($ssl_protocol = "") { rewrite ^ https://$host$request_uri? permanent; } access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://miapp; # Aquí comienza el soporte a WebSockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Aquí termina proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } }
Y con esto se tiene total soporte para SSL y WebSockets en nuestro servidor Nginx.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por alexandersalas el 03 de Abril de 2014