Questions about solutions when using proxy_cache to redirect to cached pages for non logged in users.
Zev Blut
zblut at cerego.co.jp
Tue Feb 16 11:25:43 MSK 2010
Hello,
I am trying out the proxy_cache commands in nginx. The recent mails
on the mailing list have been quite helpful for figuring out what to
do. I am able to use nginx to cache pages for non logged in users and
have logged in users go directly to the backend.
I have a few questions about if I am calling proxy_pass correctly, and
if I can use proxy_pass_header to only let a certain Set-Cookie header
through.
* in location / I rewrite to either the logged in or not logged in states.
But, I have to explicitly regex catch the real uri and add the args to
the proxy pass.
i.e.
http://example.com/search?keword=nginx
would lose the ?keyword=nginx if I just used
proxy_pass http://app/$1
Is my solution for calling "proxy_pass http://app/$1?$args;" correct?
* For not logged in users I would only like to let the cookie
"language_code"
through and block any other cookies. Is that possible in nginx?
* On a side note, the site has the same uri for multiple languages.
So when a user changes the site's language I am able to have nginx
properly cache based on the language. Except the user's web browser
will keep a cached copy of the first language, which can create a
confusing experience. So far my solution is to striping the
Cache-Control from the response header. This way nginx keeps a copy of
the page in its' cache, but the web browser will not. I am wondering
if there is a better solution.
Thanks,
Zev
The following is a roughly summarized view of my configuration.
----- nginx.conf --------
upstream app {
server 127.0.0.1:3000;
}
location / {
set $iflang "ja";
set $backend "not_logged_in_user";
if ($loggeduser) { set $backend "logged_in_user"; }
rewrite ^(.*)$ /$backend$1;
}
location ~ ^/not_logged_in_user/(.*)$ {
proxy_pass http://app/$1?$args;
proxy_cache one;
proxy_cache_key "$scheme$host$iflang$request_uri$args";
proxy_cache_valid 200 15m;
proxy_cache_valid 301 1h;
proxy_cache_use_stale updating error;
# Ideally would only like to pass through language_code cookie
proxy_pass_header Set-Cookie;
# Stop the browser from caching, try to just keep the caching on nginx.
proxy_hide_header Cache-Control;
}
location ~ ^/logged_in_user/(.*)$ {
proxy_pass http://app/$1?$args;
}
----- nginx.conf --------
More information about the nginx
mailing list