5

Apache is a reverse-proxy to my app. A client requests http://cdn.example.com/foo/images/logo.png:

GET /foo/images/logo.png HTTP/1.1 Host: cdn.example.com 

I want Apache to modify the request so that the app on the other side of the reverse proxy receives it in the format http://foo.example.com/images/logo.png:

GET /images/logo.png HTTP/1.1 Host: foo.example.com 

Rewriting the URL is easy, but I haven't found a way to modify the Host header with a value extracted from the URL. Is this possible?

0

2 Answers 2

6

Yes, you can change headers based on URIs. It's ugly though -- This is the only way I know of to do it:

  1. Use SetEnvIF to set an environment variable if the URI matches what you want to rewrite.

  2. Use mod_headers' RequestHeader directive to reset the appropriate Request Header (Host:) if that environment variable is set.

4

Using the SetEnvIf and Header mentioned above, here is what I did to rewrite the "Accept-Encoding" header to reduce the caching copies created by mod_cache, tested working.

# rewrite variation of the Accept-Encoding header to the same one # to reduce the caching copies UnsetEnv compression_ok SetEnvIfNoCase Accept-Encoding ".*gzip.*deflate.*" compression_ok=1 RequestHeader set Accept-Encoding "gzip,deflate" env=compression_ok 

What this does: Different browser sets the Accept-Encoding slightly differently, like "gzip,deflate" vs "gzip, deflate" (with extra space), and these causes the mod_cache to create different copies of the content. By rewrite it to the same value, the mod_cache only generates one copy. (note: my server only care about "gzip,deflate", yours might be different).

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.