Welcome! Log In Create A New Profile

Advanced

memcached, named locations, custom 404

December 07, 2011 12:14PM
Hi
Is it possible to do a redirect from one named location to another?
I'm using 1.0.10 and it does seem to stop processing in the first named location.
Here's an example (funny http codes do not matter):

server {

error_page 404 /404.html;

location = /404.html {
internal;
}

location = /index.php {
internal;
error_page 404 /404.html;
error_page 418 = @nocache;
error_page 303 = @process;
if ($request_method = POST) {
return 418;
}
return 303;
}

location @process {
set $memcached_key something$arg_memkey;
error_page 404 502 = @nocache;
memcached_pass memcached;
}

location @nocache {
fastcgi_pass backend;
}

The premise was this. I don't allow direct access to index.php, so I marked it internal. For a reason I don't yet understand, if I don't specify error_page 404 in this location, nginx will show a standard 404 error page, not the one defined at server level.
Because memcached returns 404 if the key is not found, I had to move it to different location (conflict with internal's 404).

So the GET request is passed to @process. And here's the problem - if the key is found in memcached, everything works. But if the key is not found, the request is not passed to @nocache anymore (it returns 404 - I thought it would be handled by error_page defined above), but the generic 404 nginx error page is returned.
If I remove the "internal;" and error_page 404 from location =/index.php and move the @process code there, everything works. So it looks I can't pass the request from @process to @nocache.

If that's the case, how would you solve this problem with an optimal configuration?

Thanks a lot!

relevant part of the debug log:
2011/12/07 18:11:24 [info] 2089#0: *5 key: "something/album/164" was not found by memcached while reading response header from upstream [...]
2011/12/07 18:11:24 [debug] 2089#0: *5 finalize http upstream request: 404
2011/12/07 18:11:24 [debug] 2089#0: *5 finalize http memcached request
2011/12/07 18:11:24 [debug] 2089#0: *5 free keepalive peer
2011/12/07 18:11:24 [debug] 2089#0: *5 free keepalive peer: saving connection 0A062054
2011/12/07 18:11:24 [debug] 2089#0: *5 event timer del: 9: 428017663
2011/12/07 18:11:24 [debug] 2089#0: *5 free rr peer 1 0
2011/12/07 18:11:24 [debug] 2089#0: *5 http finalize request: 404, "/index.php?page=album&id=164&memkey=/album/164" a:1, c:3
2011/12/07 18:11:24 [debug] 2089#0: *5 http special response: 404, "/index.php?page=album&id=164&memkey=/album/164"
2011/12/07 18:11:24 [debug] 2089#0: *5 http set discard body
2011/12/07 18:11:24 [debug] 2089#0: *5 charset: "" > "utf-8"
2011/12/07 18:11:24 [debug] 2089#0: *5 HTTP/1.1 404 Not Found
Subject Author Posted

memcached, named locations, custom 404

danny000 December 07, 2011 12:14PM

Re: memcached, named locations, custom 404

danny000 December 07, 2011 12:28PM

Re: memcached, named locations, custom 404

Maxim Dounin December 07, 2011 12:30PM

Re: memcached, named locations, custom 404

danny000 December 07, 2011 12:38PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 272
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready