nginx cache seems to swallow Set-Cookie
mschipperheyn
nginx-forum at nginx.us
Fri Jan 14 00:52:02 MSK 2011
I realize that this is an old thread but it relates to my question. I
use proxy_cache with a somewhat special approach.
User can log in to our site that has been designed to be completely
reverse proxy cacheable, even when a user is logged in. We use a
separate json call to retrieve session information for the user.
So some pages like /product/* are cacheable but they may still be
retrieved by a logged in user. I want to make sure that the set cookie
doesn't get accidently get cached and allow another user to access my
session. Just this kind of thing seemed to happen the other day when an
anonymous user was suddenly logged in under my account, so now I'm not
sure how to see it. I am hoping that this was an issue related to a
stale proxy_cache that accumulated "illegal" content over the course of
development and changes in configuration.
The desired functionality is;
Anonymous useer
* request cacheablepage1.html
* retrieve from cache if available => cachefile01
* put in cache
Logged in user
* request cacheablepage1.html
* retrieve from cache => cachefile01
* request cacheablepage2.html
* retrieve from cache if availabel
* put in cache but strip any set-cookie associated with the session
=> cachefile02
* get cachefile02
Anonymous user
* request cacheablepage2.html
* retrieve from cache if available => cachefile02
Any result from a POST
* never put in proxy cache
My current config for this is
[code]
server {
listen 80 default_server;
server_name _;
server_name_in_redirect off;
charset utf-8;
root /var/lib/APP;
add_header Cache-Control public;
set $proxy_bypass off;
[..]
location ~ (cart|account|editor|admin)$ {
set $proxy_bypass on;
try_files $uri @proxy;
}
location / {
keepalive_timeout 30;
rewrite ^([^.]*[^/])$ $1/ permanent;
try_files $uri @proxy;
}
location @proxy {
proxy_cache STATIC;
proxy_pass http://localhost:9000;
proxy_cache_valid 200 15m;
proxy_cache_valid 404 5m;
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
proxy_cache_key $host$request_uri;
proxy_ignore_headers Set-Cookie;
proxy_cache_bypass $proxy_bypass;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
#proxy_max_temp_file_size 0;
proxy_buffering on;
#proxy_store off;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
# All POST requests go directly
if ($request_method = POST) {
proxy_pass http://localhost:9000;
break;
}
}
[/code]
Are my assumptions correct? What directes are important to pay attention
to in order to avoid accidental session access for the wrong user?
Kind regards,
Marc
Posted at Nginx Forum: http://forum.nginx.org/read.php?2,126312,166019#msg-166019
More information about the nginx
mailing list