NGINX and wrong memcached output

Jakub lists at ruby-forum.com
Sun Apr 22 16:48:06 UTC 2012


Hi,

At first let me tell my application was developped under PHP with
Symfony2, but I guess my problem is about nginx and memcached and not
about PHP. As I can see here is good community about nginx and I will be
glad for any help.

I have problem with nginx and memcached responses such as text/html or
application/json. My idea is:
-First request on nginx server (reverse proxy memcached server)
-Try if I have memcached response (memcached run on same server as
nginx)
-If not go to application server
-Application server makes response
-Stores response in to memcached
-And for next same request nginx hit response from memcached and return
to client.

But the problem is, when the application server stores response to
memcached (data in memcached are stored good and corectly) and NGINX hit
the request in memcached, but return totaly wrong hashed content.

For example:
First request, ngingx didnt find response in memcached, pass to
application server, and here is response ... good and correct JSON.
------- Headers
HTTP/1.0 200 OK
Date: Sun, 22 Apr 2012 16:13:58 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze8
cache-control: no-cache
x-debug-token: 4f942e4dee10b
Content-Length: 476
Connection: close
Content-Type: application/json
-------- Content
[{"id":10,"title":"Cinema","url":"cinema","articles":null},{"id":2,"title":"Computers","url":"computer","articles":null},{"id":8,"title":"Foto","url":"foto","articles":null},{"id":12,"title":"Literature","url":"literature","articles":null},{"id":4,"title":"Music","url":"music","articles":null},{"id":18,"title":"Society","url":"society","articles":null},{"id":16,"title":"Sport","url":"sport","articles":null},{"id":6,"title":"Travelling","url":"travelling","articles":null}]

But for the second request, when NGINX find response in memcached, NGINX
serves totaly wrong.
-------- Headers
Connection:keep-alive
Content-Length:164
Content-Type:application/json
Date:Sun, 22 Apr 2012 16:17:15 GMT
Server:nginx/0.7.67
-------- Content
xśuÎ1Â0ŕ˙rs+"’UpŇI·ââ)צ$AÄ˙nˇ59¤ßƒďÝ5o ˜zU0‚=uŘZ¨
˘űE„cÓ%ćO5ʵ‚ľí“`ˆĹN͢Ţ}đâ3ĽŹaŐę摆y+)`¶¬«ů…M8ĄH.ŰvJ‡Ő»gďĺ•eĚyÁn•í}"§4ď»űDfęŮŠ®ţ®_ß
ť

With text/html I have exactly the same problem. Do you have anybody any
idea plese? Here is my nginx configuration:

# nginx virtual host from sites-available
server {
    listen          80;
    server_name     dp-xskrha.local;
    access_log    /var/log/nginx/dp-xskrha/access.log;
    error_log       /var/log/nginx/dp-xskrha/error.log;

    # Static content, images, css, js
    location ~*
^.+\.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|avi|mp3)$
{
        proxy_redirect          off;
        proxy_pass              http://app.dp-xskrha.local:80;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For
$proxy_add_x_forwarded_for;
        proxy_cache             dp-xskrha-static;
        roxy_cache_valid        200  10m;
    }

    # Model api json
    location /model-api {
        default_type          application/json;
        set $memcached_key    $uri;
        memcached_pass        127.0.0.1:11211;
        error_page            404 =200 @fallback;
    }

    # Dynamic content, all rest uri
    location / {
        default_type            text/html;
        charset                 utf-8;
        set $memcached_key      $uri;
        memcached_pass          127.0.0.1:11211;
        error_page              404 =200 @fallback;
      }

    # Memcached fallback for proxy pass
    location @fallback {
        proxy_set_header           Host             $host;
        proxy_set_header           X-Real-IP        $remote_addr;
        proxy_set_header           X-Forwarded-For
$proxy_add_x_forwarded_for;
        proxy_redirect             off;
        proxy_pass                 http://app.dp-xskrha.local:80;
      }
}


#nginx.conf
user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;

    access_log    /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # proxy settings
    proxy_cache_path  /data/nginx/cache  levels=1:2
keys_zone=dp-xskrha-static:10m
                                         inactive=24h  max_size=1g;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Thank you very much, for Your response :)

Jacob

-- 
Posted via http://www.ruby-forum.com/.


More information about the nginx mailing list