Setting expires header bypasses app server

Cliff Wells cliff at develix.com
Thu Apr 2 23:41:11 MSD 2009


On Thu, 2009-04-02 at 11:20 -0700, Michael Shadle wrote:
> That's because it is hitting the location ~*
> \.(js|css|jpg|jpeg|gif|png)$ {  first
> 
> try this (until Igor comes up with something better)
> 
> 
>    location ~* \.(js|css|jpg|jpeg|gif|png)$ {
>  if (!-f $request_filename) {
>      proxy_pass http://thins;
>      break;
>    }
>      if (-f $request_filename) {
>        expires      max;
>        break;
>      }
>    }

You probably don't need a separate test to set the Expires header:

location ~* \.(js|css|jpg|jpeg|gif|png)$ {
    expires max;
    if (!-f $request_filename) {
        proxy_pass http://thins;
    }
}

The backend should supply its own Expires header that overrides the
Nginx one (or perhaps Nginx doesn't set Expires for proxied requests -
I haven't specifically tested to see which it is).   In any case, this
has worked fine whenever I've used it (you can check the wiki headers,
which has expires 30d set on / before passing to mediawiki).

And I'd probably use something like this in any case (I've never used
try_files, but this looks right):

location ~* \.(js|css|jpg|jpeg|gif|png)$ {
    expires max;
    try_files $request_filename @thins;    
}

location @thins {
    proxy_pass http://thins;
}

And as a side note, getting rid of the regex would be a lot more
efficient.   I'd consider making a special location for these files so
you could avoid the need for that.

Cliff


> I don't know if the braces got aligned properly but that general idea.
> 
> On Thu, Apr 2, 2009 at 10:41 AM, nmk <nginx-forum at nginx.us> wrote:
> >> It's because it is matching that regexp first.
> >>
> >> You could do your if (-f ) check inside of there
> >> and it would probably
> >> work, but that's kind of messy.
> >
> > I am doing a -f check in the location. Still doesn't work as I expect it to.
> >
> > Could you provide an example please?
> >
> >> I'm sure Igor can
> >> post and give you a
> >> much cleaner way to do the entire thing.
> >
> > I hope so. :-) I still haven't got it working.
> >
> > Best,
> > Nickolay
> >
> > Posted at Nginx Forum: http://forum.nginx.org/read.php?2,700,755#msg-755
> >
> >
> >
> 






More information about the nginx mailing list