# NGINX and wrong memcached output

**URL:** <https://www.ruby-forum.com/t/nginx-and-wrong-memcached-output/219169>\
**Category:** NGINX\
**Created:** [April 22, 2012, 6:48pm UTC](https://www.ruby-forum.com/t/nginx-and-wrong-memcached-output/219169 "2012-04-22T18:48:06Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gurdipe\_D](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/b77776/32.png) [@Gurdipe\_D](https://www.ruby-forum.com/u/Gurdipe_D)\
**Post date:** [April 22, 2012, 6:48pm UTC](https://www.ruby-forum.com/t/nginx-and-wrong-memcached-output/219169/1 "2012-04-22T18:48:06Z")

</div>

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](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](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

---

<div class="post-metadata">

**Author:** ![JakubSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/3da27b/32.png) [@JakubSS](https://www.ruby-forum.com/u/JakubSS)\
**Post date:** [April 22, 2012, 10:50pm UTC](https://www.ruby-forum.com/t/nginx-and-wrong-memcached-output/219169/2 "2012-04-22T22:50:15Z")

</div>

Hello!

On Sun, Apr 22, 2012 at 06:48:06PM +0200, Jakub wrote:

> -Try if I have memcached response (memcached run on same server as
> 
> Content-Length: 476  
> 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:

Content stored in memcached is compressed, and nginx just returns  
what you have in memcached. You have to read docs on your  
memcached client to instruct it to don’t do any  
compression/serialization and store raw data instead.

Maxim D.

---

<div class="post-metadata">

**Author:** ![JakubSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/3da27b/32.png) [@JakubSS](https://www.ruby-forum.com/u/JakubSS)\
**Post date:** [April 23, 2012, 12:02am UTC](https://www.ruby-forum.com/t/nginx-and-wrong-memcached-output/219169/3 "2012-04-23T00:02:11Z")

</div>

Hi Maxim,

yes, you are right. That was the problem. I have just solved it and my  
app works correctly now. Thank you very much, for you response. And  
NGINX is strong tool 🙂

Regards,

Jacob
