You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Haroon Rafique <ha...@utoronto.ca> on 2009/11/19 21:28:45 UTC

[users@httpd] sending pre-compressed content through reverse proxy using mod_rewrite

Hi there,

I am running a reverse proxy (using mod_proxy) and I would like to 
internally rewrite (using mod_rewrite) certain files and instead send 
their pre-compressed .gz versions. I have minified and compressed versions 
of .js and .css files available with .gz extensions (using yuicompressor, 
if it matters) through the proxied backend. The files may or may not be 
physically located on the reverse proxy (depending on whether the backend 
is running on the same machine or not). This is what has worked for me as 
follows:

RewriteEngine On

# static .js files should be internally redirected to gzipped ones
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_URI} ^/rxp/.+\.js$
RewriteRule ^(.+\.js)$ proxy:balancer://glassfishcluster$1.gz 
[E=gz:gz,E=jsgz:jsgz,L]

# static .css files should be internally redirected to gzipped ones
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_URI} ^/rxp/.+\.css$
RewriteRule ^(.+\.css)$ proxy:balancer://glassfishcluster$1.gz 
[E=gz:gz,E=cssgz:cssgz,L]

# set some headers for gzipped content
Header set Content-Encoding gzip env=gz
Header set Content-Type text/javascript env=jsgz
Header set Content-Type text/css env=cssgz

The above works well so far. The Content-Encoding and the Content-Type 
headers are okay as well. The only problem is if the requested URL is not 
available (e.g., typo). Then I do get a 404, but since the 
Content-Encoding header still says gzip, the browser displays:

 	* Content Encoding Error
           The page you are trying to view cannot be
           shown because it uses an invalid or unsupported form of
           compression.

Any way around the "improper" 404 screen? In general, is my rewrite 
strategy above somewhat sound? Comments, thoughts are welcome.

This is on RHEL Server 5.3.

Server version: Apache/2.2.14 (Unix)
Server built:   Nov 17 2009 16:38:48

Compiled in modules:
   core.c
   worker.c
   http_core.c
   mod_so.c

Thanks,
--
Haroon Rafique
<ha...@utoronto.ca>


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


[users@httpd] Re: sending pre-compressed content through reverse proxy using mod_rewrite

Posted by Oliver Schoett <ol...@capgemini-sdm.com>.
Haroon Rafique wrote:
> It would be nice if I could just override
> the 404 error though.
>    

I just did that using mod_asis. The .asis document can set its own 
headers, including status:

    Status: 200 OK
    Content-Type: image/gif
    Cache-Control: public, max-age=7200
    Expires: Thu, 01 Jan 2009 00:00:00 GMT
    Last-Modified: Sat, 20 Sep 2008 20:32:04 GMT

    GIF89a[dummy image]

This is for an image server where URLs of missing images receive a dummy 
image with status 200.

However, I did not succeed in setting a dynamic Expires: header using 
mod_expires.

Regards,

Oliver Schoett



---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] sending pre-compressed content through reverse proxy using mod_rewrite

Posted by Haroon Rafique <ha...@utoronto.ca>.
On Today at 10:12am, HR=>Haroon Rafique <ha...@utoronto.ca> wrote:

HR> Hi Igor,
HR> 
HR> Thanks for your response. I tried adding the following (is that what you 
HR> had in mind?):
HR> 
HR> # set custom 404 in case .gz is not available
HR> <LocationMatch "^/rxp.+\.(css|js)$">
HR>     ErrorDocument 404 "The requested URL was not found on this server."
HR> </LocationMatch>
HR> 
HR> [..snip..]

Hi Igor,

Immediately after writing this email, I tried:

ProxyErrorOverride On

and that seems to do the trick. It would be nice if I could just override 
the 404 error though.

Cheers,
--
Haroon Rafique   <ha...@utoronto.ca>
Web Dude         416-946-5080
Enterprise Apps & Solutions Integration, University of Toronto

---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] sending pre-compressed content through reverse proxy using mod_rewrite

Posted by Haroon Rafique <ha...@utoronto.ca>.
On Today at 5:20pm, IC=>Igor Cicimov <ic...@gmail.com> wrote:

IC> Write your own 404 page? Is that good enough?
IC> 

Hi Igor,

Thanks for your response. I tried adding the following (is that what you 
had in mind?):

# set custom 404 in case .gz is not available
<LocationMatch "^/rxp.+\.(css|js)$">
    ErrorDocument 404 "The requested URL was not found on this server."
</LocationMatch>

but I am still getting (Content-Encoding: gzip and Content-type: 
text/javascript is the problem):

  HTTP/1.1 404 Not Found
  Date: Fri, 20 Nov 2009 15:04:15 GMT
  Server: Sun GlassFish Enterprise Server v2.1
  X-Powered-By: Servlet/2.5
  Content-Type: text/javascript
  Content-Language:
  Content-Length: 1018
  Content-Encoding: gzip
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
2009-11-20 10:04:17 ERROR 404: Not Found.

Ideas?

Cheers,
--
Haroon Rafique
<ha...@utoronto.ca>


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] sending pre-compressed content through reverse proxy using mod_rewrite

Posted by Igor Cicimov <ic...@gmail.com>.
Write your own 404 page? Is that good enough?


On Fri, Nov 20, 2009 at 7:28 AM, Haroon Rafique
<ha...@utoronto.ca>wrote:

> Hi there,
>
> I am running a reverse proxy (using mod_proxy) and I would like to
> internally rewrite (using mod_rewrite) certain files and instead send their
> pre-compressed .gz versions. I have minified and compressed versions of .js
> and .css files available with .gz extensions (using yuicompressor, if it
> matters) through the proxied backend. The files may or may not be physically
> located on the reverse proxy (depending on whether the backend is running on
> the same machine or not). This is what has worked for me as follows:
>
> RewriteEngine On
>
> # static .js files should be internally redirected to gzipped ones
> RewriteCond %{HTTP:Accept-Encoding} gzip
> RewriteCond %{REQUEST_URI} ^/rxp/.+\.js$
> RewriteRule ^(.+\.js)$ proxy:balancer://glassfishcluster$1.gz
> [E=gz:gz,E=jsgz:jsgz,L]
>
> # static .css files should be internally redirected to gzipped ones
> RewriteCond %{HTTP:Accept-Encoding} gzip
> RewriteCond %{REQUEST_URI} ^/rxp/.+\.css$
> RewriteRule ^(.+\.css)$ proxy:balancer://glassfishcluster$1.gz
> [E=gz:gz,E=cssgz:cssgz,L]
>
> # set some headers for gzipped content
> Header set Content-Encoding gzip env=gz
> Header set Content-Type text/javascript env=jsgz
> Header set Content-Type text/css env=cssgz
>
> The above works well so far. The Content-Encoding and the Content-Type
> headers are okay as well. The only problem is if the requested URL is not
> available (e.g., typo). Then I do get a 404, but since the Content-Encoding
> header still says gzip, the browser displays:
>
>        * Content Encoding Error
>          The page you are trying to view cannot be
>          shown because it uses an invalid or unsupported form of
>          compression.
>
> Any way around the "improper" 404 screen? In general, is my rewrite
> strategy above somewhat sound? Comments, thoughts are welcome.
>
> This is on RHEL Server 5.3.
>
> Server version: Apache/2.2.14 (Unix)
> Server built:   Nov 17 2009 16:38:48
>
> Compiled in modules:
>  core.c
>  worker.c
>  http_core.c
>  mod_so.c
>
> Thanks,
> --
> Haroon Rafique
> <ha...@utoronto.ca>
>
>
> ---------------------------------------------------------------------
> The official User-To-User support forum of the Apache HTTP Server Project.
> See <URL:http://httpd.apache.org/userslist.html> for more info.
> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
>  "   from the digest: users-digest-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org
>
>