# Fastcgi cache based on header

**URL:** <https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619>\
**Category:** NGINX\
**Created:** [March 23, 2010, 5:14pm UTC](https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619 "2010-03-23T17:14:59Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tomasz\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/41988e/32.png) [@Tomasz\_P](https://www.ruby-forum.com/u/Tomasz_P)\
**Post date:** [March 23, 2010, 5:14pm UTC](https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619/1 "2010-03-23T17:14:59Z")

</div>

Hello,

Is there by any chance a way make something like this?

location / {  
try\_files $uri $uri/ @fallback;  
fastcgi\_pass app;  
fastcgi\_param SCRIPT\_FILENAME $document\_root/$fastcgi\_script\_name;  
include base/fastcgi\_params;

```
 if ($http_app_cache = "1") {
 fastcgi_cache landingpage;
 fastcgi_cache_key $http_host$request_uri;
 fastcgi_cache_valid 200 2m;
 fastcgi_cache_valid 404 1m;
 fastcgi_cache_valid 500 1m;
 fastcgi_cache_use_stale updating error timeout invalid_header 

```

http\_500;  
fastcgi\_ignore\_headers Expires Cache-Control;  
}  
}

---

<div class="post-metadata">

**Author:** ![Tomasz\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/41988e/32.png) [@Tomasz\_P](https://www.ruby-forum.com/u/Tomasz_P)\
**Post date:** [March 24, 2010, 3:40am UTC](https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619/2 "2010-03-24T03:40:07Z")

</div>

On Wed, Mar 24, 2010 at 12:14 AM, Tomasz P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Is there by any chance a way make something like this?

Can you try this?

```
 location / {
      if ($http_app_cache = "1") {
           try_files $uri $uri/ @fallback;
           fastcgi_pass app;
           fastcgi_param SCRIPT_FILENAME

```

$document\_root/$fastcgi\_script\_name;  
include base/fastcgi\_params;  
fastcgi\_cache landingpage;  
fastcgi\_cache\_key $http\_host$request\_uri;  
fastcgi\_cache\_valid 200 2m;  
fastcgi\_cache\_valid 404 1m;  
fastcgi\_cache\_valid 500 1m;  
fastcgi\_cache\_use\_stale updating error timeout  
invalid\_header http\_500;  
fastcgi\_ignore\_headers Expires Cache-Control;

```
          break;
      }

      try_files $uri $uri/ @fallback;
      fastcgi_pass app;
      fastcgi_param SCRIPT_FILENAME

```

$document\_root/$fastcgi\_script\_name;  
include base/fastcgi\_params;  
}

Cheers,  
-agentzh

---

<div class="post-metadata">

**Author:** ![Tomasz\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/41988e/32.png) [@Tomasz\_P](https://www.ruby-forum.com/u/Tomasz_P)\
**Post date:** [March 24, 2010, 8:24am UTC](https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619/3 "2010-03-24T08:24:34Z")

</div>

this won’t work as well because try\_files is not allowed in an if  
statement

any other suggestions?

---

<div class="post-metadata">

**Author:** ![Tomasz\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/41988e/32.png) [@Tomasz\_P](https://www.ruby-forum.com/u/Tomasz_P)\
**Post date:** [March 25, 2010, 9:21am UTC](https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619/4 "2010-03-25T09:21:16Z")

</div>

This works Maxim, thanks!

---

<div class="post-metadata">

**Author:** ![Tomasz\_P](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/41988e/32.png) [@Tomasz\_P](https://www.ruby-forum.com/u/Tomasz_P)\
**Post date:** [March 24, 2010, 11:23am UTC](https://www.ruby-forum.com/t/fastcgi-cache-based-on-header/185619/5 "2010-03-24T11:23:06Z")

</div>

Hello!

On Tue, Mar 23, 2010 at 05:14:31PM +0100, Tomasz P. wrote:

> ```
> if ($http_app_cache = "1") {
> fastcgi_cache landingpage;
> fastcgi_cache_key $http_host$request_uri;
> fastcgi_cache_valid 200 2m;
> fastcgi_cache_valid 404 1m;
> fastcgi_cache_valid 500 1m;
> fastcgi_cache_use_stale updating error timeout invalid_header http_500;
> fastcgi_ignore_headers Expires Cache-Control;
> }
> 
> ```
> 
> }

Something like this should work:

```
 location / {
     error_page 403 = @cache;

     if ($http_app_cache = "1") {
         return 403;
     }

     try_files $uri $uri/ @fallback;
     fastcgi_pass ...
     ...
 }

 location @cache {
     try_files $uri $uri/ @fallback;
     fastcgi_pass ...
     fastcgi_cache ...
     ...
 }

```

Maxim D.
