3 votes

Nginx n'envoie pas de fichiers compressés lorsqu'il passe par un équilibreur de charge.

J'ai un serveur nginx qui fait office d'équilibreur de charge et qui délègue les demandes à d'autres serveurs d'application.

Lorsque j'essaie de demander une ressource directement au serveur d'application, la ressource est servie dans sa version gzippée, échantillon :

~ curl -IH 'Accept-Encoding: gzip, deflate' http://application/asset.css HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 15 Sep 2016 14:13:03 GMT Content-Type: text/css Content-Length: 35038 Connection: keep-alive Content-Encoding: gzip Expires: Thu, 31 Dec 2037 23:55:55 GMT Cache-Control: max-age=315360000 Cache-Control: public

Alors que la même requête à l'équilibreur de charge, renvoie la version non compressée de la ressource. ~ curl -IH 'Accept-Encoding: gzip, deflate' https://load-balancer/asset.css HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 15 Sep 2016 14:16:15 GMT Content-Type: text/css Content-Length: 240442 Connection: keep-alive Expires: Thu, 31 Dec 2037 23:55:55 GMT Cache-Control: max-age=315360000 Cache-Control: public Accept-Ranges: bytes

Voici ma configuration pour le LB : location / { client_max_body_size 10M; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto https; # if use ssl proxy_redirect off; proxy_pass http://application; }

merci d'avance

4voto

Iván Guillén Points 71

Résolu !

J'ai compris moi-même que la requête envoyée depuis l'équilibreur de charge vers l'amont (serveur d'application), se fait en HTTP/1.0, alors que le serveur nginx du côté de l'application, ne compresse les fichiers que lorsque la requête est en HTTP >= 1.1, en raison des paramètres par défaut.

http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_http_version

0 votes

Peut-être pourriez-vous nous expliquer comment vous avez résolu ce problème, plutôt que de nous dire ce qu'il en est, et accepter votre propre réponse.

0 votes

Je pense que la réponse, avec le lien ci-dessus, explique elle-même comment résoudre le problème :) Solution pour les esprits paresseux : il suffit de configurer le paramètre gzip_http_version, qui définit la version HTTP minimale avec laquelle compresser les actifs.

0 votes

Génial :) Dès que vous le pouvez, marquez votre réponse comme acceptée, bien que je pense que les nouveaux utilisateurs doivent attendre un peu avant de pouvoir le faire.

4voto

mahyard Points 217

Il existe un autre moyen de résoudre ce problème. Vous pouvez définir une version plus élevée du protocole HTTP pour les connexions par procuration en amont. Cela peut être fait par ce paramètre : proxy_http_version 1.1;

Ce serait un meilleur choix car de cette façon vous pouvez bénéficier de nombreux avantages de HTTP/1.1 tels que connexions persistantes y Nouveaux codes d'état supplémentaires .

Par exemple, voici mon propre bloc de paramètres :

server {
    listen       80;
    server_name  domain.tld;
    location / {
         include proxy_params;
         proxy_http_version 1.1;
         proxy_pass http://my-up-stream;
    }
}

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

1 votes

Le proxy_http_version 1.1 a également résolu le problème de gzip_static après proxy_pass, merci !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X