web-dev-qa-db-fra.com

Pourquoi sub_filter semble-t-il ne pas fonctionner lorsqu'il est utilisé en conjonction avec proxy_pass?

Étant donné la configuration suivante de nginx:

server {
    listen  80;
    server_name apilocal;
    sub_filter  "apiupstream/api" "apilocal";
    sub_filter_once off;
    location /people/ {
            proxy_pass  http://apiupstream/api/people/;
            proxy_set_header Accept-Encoding "";
    }
}

Sub_filter ne répond pas correctement aux parties de la réponse. Une fois que j'ai supprimé proxy_pass de la configuration, cela fonctionne correctement. Beaucoup de gens avec ce problème finissent par avoir une compression gzip à partir du serveur en amont. J'ai vérifié que mon serveur en amont n'a pas le codage gzip activé pour ses réponses. Mais juste au cas où, j'ai également utilisé le proxy_set_header ci-dessus pour ne pas accepter gzip.

Y a-t-il potentiellement quelque chose d'autre qui me manque?

22
kylehayes

Votre réponse a probablement un autre type de contenu que celui défini dans sub_filter_types par défaut.

Référence: http://nginx.org/r/sub_filter_types

15
VBart

James T Snell y a répondu dans un commentaire:

Je n'avais pas proxy_set_header Accept-Encoding ""; vous en avez besoin pour indiquer au backend que la compression n'est pas autorisée dans une réponse.

11
Jan DB

doit-il être à l'intérieur d'un bloc de localisation? aussi, peut-être pas de citations sur match arg?

http://wiki.nginx.org/HttpSubModule

location / {   sub_filter      
      </head>   
      '</head><script
      language="javascript" src="$script"></script>';   
      sub_filter_once on;
}
0
nandoP