Hi, everyone!Sorry, I'm newbie in apache.
After a few days of search. We use apache2.4 for our project.For some improve
of our forward proxy compatibility.
As we need hide some content from our client.So we use forward proxy and filter
module.
First we use nginx as the proxy. And some key config below:
location /
{
resolver 192.168.10.1;
proxy_pass $scheme://$http_host$request_uri;
sub_filter thatsneedchange thatschangethat;
sub_filter_types application/json
application/xhtml+xml text/html text/plain;
sub_filter_once off;
}
so this can filte and replace the content on website for our client on the
internet.
But we met some problem can't resolve:
Some of clients application didn't support the standard RFC.As we found
the sub_filter module will delete every content-length header of the response.
As the lack of the content-length, our client wouldn't accept that response.
So we came up the apache module filter. As we find the document
FilterProtocol Directive
This directs mod_filter to deal with ensuring the filter doesn't run when it
shouldn't, and that the HTTP response headers are correctly set taking into
account the effects of the filter.
There are two forms of this directive. With three arguments, it applies
specifically to a filter-name and a provider-name for that filter. With two
arguments it applies to a filter-name whenever the filter runs any provider.
proto-flags is one or more of
change=yes
The filter changes the content, including possibly the content length
change=1:1
The filter changes the content, but will not change the content length
byteranges=no
The filter cannot work on byteranges and requires complete input
proxy=no
The filter should not run in a proxy context
proxy=transform
The filter transforms the response in a manner incompatible with the HTTP
Cache-Control: no-transform header.
cache=no
The filter renders the output uncacheable (eg by introducing randomised content
changes)
the change=1:1 says
The filter changes the content, but will not change the content length, and we
config our apache like this
ErrorLog "/var/log/apache2/error.log"
FilterDeclare MYFILTER
FilterProvider MYFILTER SUBSTITUTE "%{CONTENT_TYPE} >= 'text/html'"
FilterProvider MYFILTER SUBSTITUTE "%{CONTENT_TYPE} >= 'text/plain'"
FilterProvider MYFILTER SUBSTITUTE "%{CONTENT_TYPE} >= 'application/json'"
FilterProvider MYFILTER SUBSTITUTE "%{CONTENT_TYPE} >=
'application/xhtml+xml'"
<IfModule mod_proxy.c>
ProxyRequests On
ProxyVia On
NoProxy localhost
ProxyBadHeader Ignore
ProxyPreserveHost On
FilterChain MYFILTER
FilterTrace MYFILTER 1
FilterProtocol MYFILTER SUBSTITUTE change=1:1
Substitute "s|27.24.140|49.24.141|ni"
RequestHeader unset Accept-Encoding
</IfModule>
But, as we test the apache module filter as add
FilterProtocol MYFILTER SUBSTITUTE change=1:1
He also delete the content-length header.
I don't know why. Or what i leave out?