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

21

É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 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?

kylehayes
la source

Réponses:

15

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

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

VBart
la source
25
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.
James T Snell
1
La réponse originale doit être modifiée pour inclure le commentaire @JamesTSnell, sans lequel la réponse est inutile.
HeadCode
7

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.

Jan DB
la source
0

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;
}
nandoP
la source