How to force nginx to cache HTTP POST response for few seconds

Hi everybody,

I’m a newbie with nginx and would like to ask your help. On potentially
very high loaded site I would like to cache response to the HTTP POST
for the few seconds. Works perfectly for GETs, but…

nginx version: nginx/0.8.54

Please see below my config:

proxy_cache_path /tmp/nginx levels=2:2:2 keys_zone=small:1m inactive=1m
max_size=10m;

server {

log_format main ‘$remote_addr $host $remote_user [$time_local]
“$request” $status $body_bytes_sent “$http_referer”
“$http_user_agent” “$gzip_ratio”’;

access_log /var/log/nginx/test_server.access.log main buffer=32k;
error_log /var/log/nginx/test_server.error.log info;


listen       80;

root   /var/www/html/nginx;
index  index.html index.htm;

location / {
    try_files $uri @apache_backend;
}

location ~ .php$ {

proxy_pass http://127.0.0.1:88;

}

location @apache_backend {
    proxy_pass http://127.0.0.1:88;

proxy_cache small;
proxy_cache_valid 5s;
proxy_cache_key $uri;
proxy_cache_use_stale updating;
add_header X-Cached $upstream_cache_status;
}
}

Any help/advices will be appreciated.

Thanks
—>>> qzpmwo <<<—

Posted at Nginx Forum:

On Thu, Sep 15, 2011 at 01:43:38AM -0400, qzpmwo wrote:

proxy_cache_path /tmp/nginx levels=2:2:2 keys_zone=small:1m inactive=1m

location ~ .php$ {

}

}

Any help/advices will be appreciated.

You should upgrade to at least 0.8.55.
If POST request body is small enough, then you can use:

location @apache_backend {
    ...
    proxy_cache_methods   POST;
    proxy_cache_key       "$uri|$request_body";
    client_max_body_size  1k;
}


Igor S.

Hi everybody,

Sorry for not reading documentation properly. proxy_cache_methods is a
saver!

Thanks a lot, case closed :slight_smile:

—>>> qzpmwo <<< —

Posted at Nginx Forum:

On Thu, Sep 15, 2011 at 03:09:48AM -0400, qzpmwo wrote:

Hi Igor,

Thanks a lot for so fast answer and for so wonderful product! I will try
to use your trick with request_body, though in my case it is an AMF
binary.

How large these binaries ?

I updated to 1.0.5 and have weird problem now (from error log):

http: file cache: /tmp/nginx-cache 0.000M, bsize: 4096
signal 17 (SIGCHLD) recieved
cache loader process 11737 exited with code 0
signal 29 (SIGIO) recieved

:frowning:

Any advices of how to figure out why is it happening?

This is non-erroneous messages logged at “notice” level.


Igor S.

Hi Igor,

Thanks a lot for so fast answer and for so wonderful product! I will try
to use your trick with request_body, though in my case it is an AMF
binary.

I updated to 1.0.5 and have weird problem now (from error log):

http: file cache: /tmp/nginx-cache 0.000M, bsize: 4096
signal 17 (SIGCHLD) recieved
cache loader process 11737 exited with code 0
signal 29 (SIGIO) recieved

:frowning:

Any advices of how to figure out why is it happening?

Thanks again
—>>> qzpmwo <<<—

Posted at Nginx Forum:

Hi Igor,

Payload size is small around 120 bytes according to my data. Response is
empty. May be that is why? Tomorrow I will try to recompile nginx with
debug enabled and may be get more data.

Thanks a lot for support.
—>>> qzpmwo <<<—

Posted at Nginx Forum:

Hi Igor,

Thanks a lot for your help. Problem was with the request body. Now
everything is working as expected.

Sincerely
—>>> qzpmwo <<<—

Posted at Nginx Forum:

Actually I was wrong. Response “Content-Length” header says 66 bytes, so
response is not empty. If I disable caching of that request, application
works. If it is enabled it stops after first cache HIT. As I mentioned
in previous mail I will try to get more data (tcpdump and nginx with
debug) tomorrow.

Thanks
—>>> qzpmwo <<<—

Posted at Nginx Forum: