nginx non utilizza gzip per parlare con i server di backend

I nostri server web eseguono IIS 7 e sono configurati per comprimere il contenuto dinamico e statico. Quando ho colpito questi server direttamente, la compressione gzip funziona.

Recentemente ho posto la nginx davanti a loro, e la compressione del gzip si è fermata. Sono riuscito a lavorare in questo modo, abilitando esplicitamente la compressione gzip sullo stesso nginx, ma questo sembra un po 'inefficiente considerando che ho una mezza dozzina di backend e una sola scatola di nginx triggers.

  • Errore misterioso con php5-fpm
  • nginx: nessun live upstream mentre si collega a monte
  • Come aggiornare nginx da 1,2 a 1,6 su debian 7
  • Nginx - Impostazione di più certificati SSL su una port IP diversi - nessuna SNI
  • Nel registro degli errori di nginx: "SSL_BYTES_TO_CIPHER_LIST: fallback inappropriato"
  • Come configurare php-fpm per registrare i registri per registrare i file configurati in virtualhost nginx
  • Sembra che nginx stripping l'intestazione Accept-Encoding . Qualcuno ha qualche consiglio su come "correggere" questo comportmento?

    Una configuration di esempio:

     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; } } 

    3 Solutions collect form web for “nginx non utilizza gzip per parlare con i server di backend”

    Nginx è un proxy inverso HTTP / 1.0, la compressione gzip non era nella specifica HTTP fino a HTTP / 1.1.

    Così nginx non invierà l'intestazione che codifica gzip accetta perché semplicemente non lo accetta. Il modo giusto per implementare la gestione di gzip in nginx è quello di parlare fastcgi al backend o di gzip usando nginx.

    A quanto pare è ansible farlo! Via Posta Elettronica:

    [nginx fa HTTP / 1.0], ma puoi totalmente eseguire gzip su HTTP 1.0 e lo facciamo. Il contenuto gzip'd viene passato attraverso un contatto con nginx, preimpostando il livello 9 di tutti i nostri contenuti statici, quindi questo è ottimale.

    nginx può essere configurato per identificare i browser che possono eseguire gzip e foward tutte le intestazioni corrette al backend e / o fare il gzip stesso

    Penso che il motivo primario nginx non support 1.1 ai backend a causa della codifica chunked. (che appoggia sulla parte anteriore) aggiunge alla complessità di trattare connessioni che muoiono in mezzo.

    Non sono sicuro di quanto tempo, ma NGINX ora support HTTP / 1.1 per i suoi backend, non è semplicemente una funzionalità standard. Puoi abilitarlo impostando proxy_http_version . Molto utile per quando i server backend sono in vhost. Per esempio:

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

    Rif: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.