Location header, memcached, nginx, django and redirected paths

Hi guys, how are you?

I using nginx, django and memcached for a site. If some path isn’t on
memcached, nginx send it to apache/django, the cache are generated
and, until it expires, nginx takes care of the requests by sending it
to memcached directly.

It works very well except when django tries to redirect a user using a
301 or 302 redirect (for login protected pages in example).

I reading the debug but, as far as I could undestand, the problem is
related with the “memcached_pass” instruction. I removed the
memcached_pass instruction sending all the traffic to the fallback and
the redirects worked again.

Is there any way to test the request and check if it is a redirect
and, in this case, just do a proxy_pass? I see that all redirects have
a “Location: something” header. I could not test it, does anyone know
how to?

Here is my configuration file:

upstream backend {
server 127.0.0.1:8000 weight=1;
}

server {
listen 80 default;
server_name localhost;

location / {

    # do not cache post requests
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    if ($request_method = POST) {
        proxy_pass http://backend;
        break;
    }

    # how to check if this is a redirection?
    if ($http_location ~* .+) {
        proxy_pass http://backend;
        break;
    }

    # each page can have a pv cookie that sets the page version of 

this
# page. It can be used for login pages
if ($http_cookie ~* “pv=([^;]+)(?:;|$)”) {
set $page_version $1;
}
set $memcached_key PR:$request_uri&pv=$page_version;
default_type text/html;
memcached_pass 127.0.0.1:11211;

    # if the page was not found in memcached, go to the backend
    error_page 501 502 404 405 @fallback;
}

location @fallback {
    proxy_pass http://backend;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

}

Can I paste some nginx error log snippet (debugged)?

Thanks for any help.


Michel Thadeu Sabchuk
Curitiba - Brasil

Hi people,

I using nginx, django and memcached for a site.
It works very well except when django tries to redirect a user using a
301 or 302 redirect (for login protected pages in example).

I found what I missed: the error_page instruction don’t get the
response code of the fallback unless I use a equal sign.

Where I wrote:

“error_page 501 502 404 405 @fallback;”

I must write:

“error_page 501 502 404 405 = @fallback;”

Thanks!


Michel Thadeu Sabchuk
Curitiba - Brasil

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs