我在memcache中缓存了一些网页。当我直接从缓存中读取页面时,页面就像这样......
!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" />
但是当我使用浏览器或curl从nginx(版本0.8.50)读取它时,看起来响应标题最终会在响应的主体中结束......
�{
" 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配置非常简单......
set $memcached_key $cookie__app_session$uri;
memcached_pass localhost:11211;
default_type text/html;
error_page 404 502 /fallback$uri;
有没有人知道为什么回复会被破坏?
答案 0 :(得分:2)
有两个错误
(a)我将响应头和主体存储在memcache中,然后在nginx规则中添加头。仅在memcache中存储响应主体消除了大部分问题
(b)我用Ruby的marshal格式(memcache-client中的默认设置)存储响应 - 使用简单的Ruby客户端读取memcache的内容隐藏了nginx无法直接使用该格式的事实。 / p>
希望有时帮助某人!
克里斯