Назад | Перейти на главную страницу

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

Учитывая следующую конфигурацию 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 по умолчанию.

Ссылка: http://nginx.org/r/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;
}