Why does sub_filter seem to not work when used in conjunction with proxy_pass?
Given the following configuration of 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 does not properly response parts of the response. Once I remove proxy_pass from the configuration, it works properly. A lot of folks with this problem end up having gzip compression from the upstream server. I've verified that my upstream server does not have gzip encoding turned on for its responses. But just in case, I've also used the proxy_set_header above to not accept gzip.
Is there potentially something else I'm missing?
Your response probably has other content-type than defined in sub_filter_types
by default.
Reference: http://nginx.org/r/sub_filter_types
James T Snell answered it in a comment:
I didn't have proxy_set_header Accept-Encoding ""; you need that to tell the backend that compression isn't allowed in a response.
does it need to be inside a location block? also, maybe no quotes on match arg?
http://wiki.nginx.org/HttpSubModule
location / { sub_filter
</head>
'</head><script
language="javascript" src="$script"></script>';
sub_filter_once on;
}