Чому, здається, 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 не відповідає належним чином частинам відповіді. Після того як я видалю проксі_пас із конфігурації, він працює належним чином. Багато людей із цією проблемою закінчуються стисканням gzip з верхнього сервера. Я переконався, що на моєму сервері вище за течією не включено кодування gzip для його відповідей. Але про всяк випадок я також використовував proxy_set_header вище, щоб не приймати gzip.

Чи є потенційно щось інше, чого мені не вистачає?

Відповіді:


15

Ваша відповідь, ймовірно, має інший тип вмісту, ніж визначено sub_filter_typesза замовчуванням.

Довідка: http://nginx.org/r/sub_filter_types


25
У мене не було proxy_set_header Accept-Encoding ""; вам потрібно, щоб сказати бекенду, що стискання у відповіді не дозволено.
Джеймс Т Снелл

1
Оригінальну відповідь слід відредагувати, щоб включити коментар @JamesTSnell, без якого відповідь марна.
HeadCode

7

James T Snell відповів на це у коментарі:

У мене не було 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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.