ruby on rails - Why does nginx + memcache corrupt my response body? -


i'm caching web pages in memcache. when read page directly cache, page formed ...

!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"-:--     0 "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">    <head>     <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 

but when use browser or curl read nginx (version 0.8.50), looks response headers ending in body of response ...

     �{         "    etag"'"16bb9f51667d334aa4e7663ca28d308a""x-runtime177"content-type"text/html; charset=utf-8"content-length"5428"set-cookie""cache-control"(private, max-age=0, must-revalidate"4<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"     "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 


nginx config pretty simple ...

     set $memcached_key $cookie__app_session$uri;      memcached_pass     localhost:11211;      default_type       text/html;          error_page         404 502 /fallback$uri; 

does have idea why response corrupt?

do! stupid developer problem!


there 2 mistakes

(a) storing response header , body in memcache, adding headers in nginx rule. storing response body in memcache removed bulk of problems

(b) storing response in ruby's marshal format (the default setting in memcache-client) - reading contents of memcache using simple ruby client hiding fact format not directly usable nginx.

hope helps sometime!

chris


Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -