How to Cache dynamic content using Nginx when sessions are involved?How to Cache dynamic content using Nginx when sessions are involved? How to Cache dynamic content using Nginx when sessions are involved? How to Cache dynamic content using Nginx when ses

António P. P. Almeida appa at perusio.net
Sun Feb 26 14:23:11 UTC 2012


On 26 Fev 2012 06h13 CET, nginx-forum at nginx.us wrote:

> This site explains how to create static files from dynamic content
> using Nginx.
> http://mark.ossdl.de/2009/07/nginx-to-create-static-files-from-dynamic-content/
>
> My question is this: can I achieve the same if login sessions are
> involved. ie. when I want to serve content to only registered users
> and not otherwise. So how to overcome sessions when it comes to
> caching and finally to use the cache next time for another session?
>
> Detailed scenario:
>
> The goal of my website is to serve content to only registered users.
>
> There are plenty of users logged in, each having different session
> IDs.
>
> A php page queries the DB and finds "XYZ" that user "A" wants and
> generates HTML output.
>
> Now if user "B" (with a different session ID) after sometime wants
> the same "XYZ", how to make Nginx to deliver from cache without
> making the php page to query the db again.

You mean you want registered users to be served the same page
regardless of their respective session ID?

> Has anybody done this before? Thanks in advance.

If that's the case then it's simple. From the given example:

At the http level:

map $uri $cache_uri {
    default $uri;
    / index.html;
}

At the server level:

location ~ ^/200[0-8]/[01][0-9]/ {
    root /tmp/nginx/blog/fetch;
    expires 30d;
    error_page 403 404 = /fetch$uri;
}

location ^~ /fetch/ {
    internal;
    proxy_pass http://127.0.0.1:80;
    proxy_store /tmp/nginx/blog$cache_uri;
    proxy_store_access user:rw group:rw all:r;
}

--- appa



More information about the nginx mailing list