web-dev-qa-db-fra.com

Nginx Inverser Proxy GZIP au client

J'ai un IIS 6.0 Web serveur Web exposé à Internet qui ne réalise pas de gzipping de manière fiable. Je sais que c'est vieux, mais tout ce que je dois travailler avec cette instance.

Ce que je veux faire, c'est mettre Nginx (ou similaire) en face de IIS comme serveur de proxy inversé et de cache pour accélérer le site Web. Cependant, je ne suis pas sûr s'il est possible d'avoir le nginx Server GZIP de lui-même sur le navigateur Web. Si IIS passe les demandes gzippées à Nginx, ils revenaient à la navigateur tout à fait.

gzip                on;
gzip_min_length     1000;
gzip_buffers        4 8k;
gzip_http_version   1.0;
gzip_disable        "msie6";
gzip_types          text/plain text/css;
gzip_vary           on;

location / {
    proxy_set_header x-real-IP $remote_addr;
    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    proxy_set_header Host $Host;
    proxy_pass http://192.168.5.37;
}

Demande HTTP (/css/Components.css)

GET /css/components.css HTTP/1.1
Host: www.mydomain.co.uk
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

Réponse HTTP (/css/Components.css)

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 22 Oct 2015 14:26:08 GMT
Content-Type: text/css
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Sat, 22 Aug 2015 09:36:54 GMT
ETag: W/"07f8614bedcd01:8beb"
X-Powered-By: ASP.NET

Y a-t-il un paramètre magique que je manque quelque part pour le dire de compresser les fichiers de nginx?

Merci!

Doyen

9
Dean Thomas

Vous pouvez ajouter le gzip_proxied any; Directive à votre Conf.

Edit :

Mon test :
[.____] J'ai configuré un simple serveur HTTP (ne pas pouvoir gzip par lui-même) sur ma machine (192.168.122.1) avec python -m http.server 8080. Quand je le demande, je reçois:

[pat@morbier ~]$ curl -I -H 'Accept-Encoding: gzip,deflate' http://192.168.122.1:8080/
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.5.0
Date: Thu, 22 Oct 2015 17:41:39 GMT
Content-type: text/html; charset=utf-8
Content-Length: 1197

J'ai mis en place un proxy avec Nginx (192.168.1222224)

gzip_min_length     1000;
gzip_buffers        4 8k;
gzip_http_version   1.0;
gzip_disable        "msie6";
gzip_types          text/plain text/css;
gzip_vary           on;

location / {
    proxy_set_header x-real-IP $remote_addr;
    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    proxy_set_header Host $Host;
    proxy_pass http://192.168.122.1:8080;
}

Quand je demande la même chose avec le proxy que je reçois

[pat@morbier ~]$ curl -I -H 'Accept-Encoding: gzip,deflate http://192.168.122.224/
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 22 Oct 2015 17:46:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1197
Connection: keep-alive

Alors j'ajoute au proxy Conf

gzip on;
gzip_proxied any;

Et je reçois

[pat@morbier ~]$ curl -I -H 'Accept-Encoding: gzip,deflate' http://192.168.122.224/
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 22 Oct 2015 17:47:54 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Content-Encoding: gzip

Vous pouvez également le voir si vous vous curlez sans -i (alors obtenez la page entière), dans mon cas, il se tourne comme un binaire affiché sur le terminal, renforçant le fait qu'il est compressé. Lorsque je freine le site Web régulier qui n'est pas gzipping, je reçois le contenu de la page Web (HTML).

Edit2 :
[.____] Cela ne fonctionne réellement que avec vos options activées, il semble qu'il ne soit pas nécessaire d'avoir gzip_progate.
[.____] AH Vous demandez sans passer l'en-tête "Accepter-coding: GZIP, dégonfler" (je suppose que vous utilisez telnet). Cela ne fonctionnera pas dans ce cas car vous ne dites pas au serveur que vous pouvez traiter Gzip codé binaire.
[.____] Essayez avec curl s'il vous plaît.

10
Pierre-Alain TORET

Oui, cela peut être fait. J'ai découvert par inadvertance (dans mon cas, IIS 8.5, qui gzipping parfaitement bien jusqu'à ce que je limite le proxy inversé Nginx devant elle, et GZIP du point de vue du navigateur a été perdue).

La configuration présentée ici:

nginx: gzip sur le serveur est perdu pendant la proxy

Donnera à vos clients une interaction GZIP avec Nginx, quel que soit ce que l'IIS fait.

Ajustez les types MIME au goût.