Учитывая следующую конфигурацию 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.
Есть ли что-то еще, что мне не хватает?
Ваш ответ, вероятно, имеет другой тип содержимого, чем определено в sub_filter_types
по умолчанию.
Джеймс Т. Снелл ответил на это в комментарии:
У меня не было proxy_set_header Accept-Encoding ""; вам нужно это, чтобы сообщить серверу, что сжатие в ответе запрещено.
он должен быть внутри блока местоположения? также, может быть, нет кавычек на match arg?
http://wiki.nginx.org/HttpSubModule
location / { sub_filter
</head>
'</head><script
language="javascript" src="$script"></script>';
sub_filter_once on;
}