Почему sub_filter не работает при использовании вместе с proxy_pass?

21

Учитывая следующую конфигурацию 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 не отвечает должным образом части ответа. Как только я удаляю proxy_pass из конфигурации, он работает правильно. У многих людей с этой проблемой возникает сжатие gzip с вышестоящего сервера. Я убедился, что на моем вышестоящем сервере для ответов не включена кодировка gzip. Но на всякий случай я также использовал вышеупомянутый proxy_set_header, чтобы не принимать gzip.

Возможно, я что-то упускаю?

kylehayes
источник

Ответы:

15

Ваш ответ, вероятно, имеет другой тип содержимого, отличный от заданного sub_filter_typesпо умолчанию.

Ссылка: http://nginx.org/r/sub_filter_types

VBart
источник
25
У меня не было proxy_set_header Accept-Encoding ""; это нужно для того, чтобы сообщить бэкэнду, что сжатие не разрешено в ответе.
Джеймс Т Снелл
1
Оригинальный ответ должен быть отредактирован, чтобы включить комментарий @JamesTSnell, без которого ответ бесполезен.
HeadCode
7

Джеймс Т Снелл ответил на это в комментарии:

У меня не было proxy_set_header Accept-Encoding ""; это нужно для того, чтобы сообщить бэкэнду, что сжатие не разрешено в ответе.

Ян БД
источник
0

это должно быть внутри блока местоположения? Кроме того, может быть, нет кавычек на матч Арг?

http://wiki.nginx.org/HttpSubModule

location / {   sub_filter      
      </head>   
      '</head><script
      language="javascript" src="$script"></script>';   
      sub_filter_once on;
}
nandoP
источник