Dlaczego sub_filter wydaje się nie działać, gdy jest używany w połączeniu z proxy_pass?

21

Biorąc pod uwagę następującą konfigurację 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 nie reaguje poprawnie na części odpowiedzi. Po usunięciu proxy_pass z konfiguracji działa poprawnie. Wielu ludzi z tym problemem kończy kompresja gzip z serwera nadrzędnego. Sprawdziłem, czy mój serwer nadrzędny nie ma włączonego kodowania gzip dla swoich odpowiedzi. Ale na wszelki wypadek użyłem również proxy_set_header powyżej, aby nie akceptować gzip.

Czy potencjalnie czegoś brakuje?

kylehayes
źródło

Odpowiedzi:

15

Twoja odpowiedź prawdopodobnie ma inny typ treści niż sub_filter_typesdomyślnie zdefiniowany .

Odniesienie: http://nginx.org/r/sub_filter_types

VBart
źródło
25
Nie miałem proxy_set_header Accept-Encoding ""; musisz to powiedzieć backendowi, że kompresja nie jest dozwolona w odpowiedzi.
James T Snell
1
Oryginalna odpowiedź powinna być edytowana w celu uwzględnienia komentarza @JamesTSnell, bez którego odpowiedź jest bezużyteczna.
HeadCode
7

James T Snell odpowiedział na to w komentarzu:

Nie miałem proxy_set_header Accept-Encoding ""; musisz to powiedzieć backendowi, że kompresja nie jest dozwolona w odpowiedzi.

Jan DB
źródło
0

czy musi znajdować się w bloku lokalizacji? też, może nie ma cytatów na temat arg meczu?

http://wiki.nginx.org/HttpSubModule

location / {   sub_filter      
      </head>   
      '</head><script
      language="javascript" src="$script"></script>';   
      sub_filter_once on;
}
nandoP
źródło