Hace unos días actualicé nuestros balanceadores para que soportaran SPDY 3.1. El servidor que negocia la conexión es Nginx. La mejora en cuanto a número de request/hits es muy grande.
La cantidad de conexiones baja mucho, mucho! Bastante más de lo que yo esperaba. A los pocos minutos de aplicar SPDY pensé que algo estaba mal, no podían ser tan pocos request, después de analizar todo a fondo quedo claro que no había nada mal, simplemente hay menos conexiones porque se hacen varias request en una sola gracias spdy.
Esto también ha reducido el consumo de CPU, y también el número de sockets abiertos, bajan tanto como los request claro.
La cantidad de páginas vistas en Google Analytics se mantiene, no hay perdida de tráfico y los servidores trabajan bastante menos. En los 4 días que lleva en marcha, parece que tener una web con https+spdy consume menos que una web solo con http.
Para que funcione SPDY en un balanceador de Amazon (ELB) se debe escuchar el puerto 443 por TCP (no https, ni tcp secure), y para saber que IP tiene el usuario final hay que activar el modo proxy en ELB y en NGINX.
En nginx, se debe añadir proxy_protocol en el “primer server” de la configuración. Si se hace en el segundo o en el tercero, no funcionará (más info). Es conveniente preparar la configuración y dejarlo todo listo solo para hacer “service nginx reload” y empezar con el nuevo protocolo.
1 2 3 4 5 6 | server { listen 443 default_server proxy_protocol ssl spdy; server_name localhost; # .... } |
Para activar el proxy protocol en ELB, vamos a suponer que nuestro balanceador se llama “mybalancer1”:
Esto crea la política de Proxy Protocol:
1 | aws elb create-load-balancer-policy --load-balancer-name mybalancer1 --policy-name EnableProxyProtocol --policy-type-name ProxyProtocolPolicyType --policy-attributes AttributeName=ProxyProtocol,AttributeValue=True |
Esto aplica esa política en nuestro balanceador:
1 | aws elb set-load-balancer-policies-for-backend-server --load-balancer-name mybalancer1 --instance-port 443 --policy-names EnableProxyProtocol |
En cuanto ejecutamos está última linea, empezará a funcionar Proxy Protocol, por lo que debemos reiniciar nginx inmediatamente. En sitios de alto tráfico hay que intentar ejecutar estos comando al mismo tiempo.
Para los que utilicen ubuntu LTS (14.04 ahora mismo), que sepan que nginx spdy 3.1 está desde la versión 1.5 si no voy mal, y la versión de ubuntu LTS es nginx 1.4, por lo que tiene spdy pero es spdy 2, que a mi no me funcionó bien. Recomiendo utilizar la versión 1.8 o superior. http://opensourceeducation.net/updating-nginx-1-4-6-to-1-8-x-on-ubuntu-14-04-and-fixing-limit_zone-errors/