Почему nginx + memcache портит моё тело ответа? - PullRequest
1 голос
/ 29 сентября 2010

Я кеширую некоторые веб-страницы в 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;

Кто-нибудьесть идея, почему ответ поврежден?

1 Ответ

2 голосов
/ 13 октября 2010

Do! Глупая проблема разработчика!


Были две ошибки

(a) Я сохранял заголовок и тело ответа в memcache, затем добавлял заголовки в правило nginx. Хранение только тела ответа в memcache позволило устранить большую часть проблем

(b) Я хранил ответ в формате marshal в Ruby (настройка по умолчанию в memcache-client) - чтение содержимого memcache с использованием простого клиента Ruby скрывало тот факт, что формат не был напрямую использован nginx.

Надеюсь, это когда-нибудь кому-нибудь поможет!

Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...