nginx no está usando gzip para hablar con serveres backend

Nuestros serveres web están ejecutando IIS 7 y están configurados para comprimir contenido dynamic y estático. Cuando golpeo estos serveres directamente, la compression gzip funciona.

Recientemente he colocado nginx delante de ellos, y la compression de gzip se ha detenido. Pude trabajar alnetworkingedor de esto permitiendo explícitamente la compression del gzip en nginx sí mismo, pero eso parece un poco ineficaz teniendo en count que tengo media docena backends y solamente una caja activa de nginx.

Parece que nginx está eliminando el encabezado Accept-Encoding . ¿Alguien tiene algún consejo sobre cómo "corregir" este comportamiento?

Una configuration de ejemplo:

 upstream backend { server 127.0.0.1:8080; } server { listen 80; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://backend; } } 

Nginx es un proxy inverso HTTP / 1.0, la compression gzip no estaba en la especificación HTTP hasta HTTP / 1.1.

Por lo tanto, nginx no enviará el encabezado gzip acept-encoding porque simplemente no lo acepta. La forma correcta de implementar gzip manejo en nginx es hablar bien fastcgi al backend o gzip usando nginx.

Aparentemente es posible hacer esto! Vía correo electrónico:

[nginx hace HTTP / 1.0], pero puedes hacer totalmente gzip sobre HTTP 1.0 y lo hacemos. El contenido gzip'd se pasa a través de intacto por nginx, pre gzip nivel 9 todo nuestro contenido estático, por lo que es óptimo.

nginx puede ser configurado para identificar los browseres que pueden hacer gzip y cualquiera de foward todos los encabezados correctos para el backend y / o hacer el propio gzip

Creo que la razón principal nginx no es compatible con 1.1 a los backends a causa de la encoding en trozos. (que apoya en la parte delantera) Se agrega a la complejidad de tratar con las conexiones que mueren a mitad de stream.

No estoy seguro de cuánto time, pero NGINX ahora es compatible con HTTP / 1.1 para los backends, no es una característica estándar. Puede habilitarla estableciendo proxy_http_version . Muy útil para cuando sus serveres de back-end están en vhosts. Por ejemplo:

 location / { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://my-backend-vhost.example.com/; proxy_http_version 1.1; } 

Ref: http://nginx.org/es/docs/http/ngx_http_proxy_module.html#proxy_http_version