Nginx and memcached response

Jakub Škrha serga at seznam.cz
Sun Apr 22 17:39:41 UTC 2012


On 22.4.2012 19:17, nginx-request at nginx.org wrote:
> ------------------------------
>
> Message: 2
> Date: Sun, 22 Apr 2012 18:48:06 +0200
> From: Jakub<lists at ruby-forum.com>
> To: nginx at nginx.org
> Subject: NGINX and wrong memcached output
> Message-ID:<89b67bf90e128310fea0429f089719aa at ruby-forum.com>
> Content-Type: text/plain; charset=UTF-8
>
> 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
>
Date: Sun, 22 Apr 2012 19:17:29 +0200
From: Bertrand Paquet<bpaquet at octo.com>
To:nginx at nginx.org
Subject: Re: Nginx and memcached response
Message-ID:
	<CAPs0E=02iCkH4bGM6UqryPNS3cqhvxGp4SWt7NDAe6FNFeb1Jg at mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi,

Does your application server fill memcached correctly ? May be a binary /
encoding problem when connecting to memcached. Or the content is stored
gzipped ?

Regards

Bertrand


Hi,

yes the server fill memcached correctly. For example, if I store on 
simple JSON value, it stores correctly. Or when I store plain text, 
there is not any problem. Just if store to memcached some content with 
headers. Maybe there is problem with headers. I will try some other 
memcached client than the the application server is using. But I am not 
sure if the problem is in store process. I think there is a problem with 
nginx read proces.

Thank you very much

Jacob



More information about the nginx mailing list