В следующей статье я попытался настроить кеширование Apache2, чтобы использовать его с Django в Ubuntu 12.10 с mod_wsgi. Я хочу, чтобы Apache кэшировал некоторые запросы для меня.Кэширование Django Ответы с mod_wsgi и Apache2 mem_cache
http://www.howtoforge.com/caching-with-apaches-mod_cache-on-ubuntu-10.04
Из статьи я включил модули и настройки следующий скрипт для тестирования кэширования. Кэширование работает отлично - я получаю только новую метку времени через 5 минут.
vi /var/www/cachetest.php
<?php
header("Cache-Control: must-revalidate, max-age=300");
header("Vary: Accept-Encoding");
echo time()."<br>";
?>
Теперь в моем ответе Джанго, я возвращаю объект HttpResponse после установки соответствующих заголовков одинаково:
# Create a Response Object with the content to return and set it's
response = HttpResponse("%s"%(output_display))
response['Cache-Control'] = 'must-revalidate, max-age=20'
response['Vary'] = 'Accept-Encoding'
return response
Кэширование с просьбой Django не работает. Я использовал Firefox LiveHeaders для просмотра заголовков ответов HTTP.
Для примера ссылку выше и PHP скрипт заголовки выглядят как:
http://localhost/cachetest.php
GET /cachetest.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0
HTTP/1.1 200 OK
Date: Sun, 10 Mar 2013 02:29:32 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.4.6-1ubuntu1.1
Cache-Control: must-revalidate, max-age=300
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 34
Connection: close
Content-Type: text/html
----------------------------------------------------------
Для моей Django запрос - кэширование не работает, он всегда заставляет длительную операцию, чтобы завершить ответ - так же, как перезагружая запрос php выше с помощью F5. Используя плагин FireFox я, кажется, писать правильные заголовки:
http://localhost/testdjango/testdjango/
GET /testdjango/testdjango/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
HTTP/1.1 200 OK
Date: Sun, 10 Mar 2013 02:32:41 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Cache-Control: must-revalidate, max-age=20
Content-Encoding: gzip
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
----------------------------------------------------------
Что я делаю неправильно? Как я могу заставить кеширование django работать как скрипт php? Благодаря!
Спасибо за ответ. Я попытался установить соответствующие заголовки в Django, но они как-то переопределены. См. Мой следующий вопрос об этом здесь: http://stackoverflow.com/questions/15323619/django-response-always-chunked-with-text-html-cannot-set-content-length. У вас есть другие идеи для этого? Thanks - – PhilBot
Разве 'MCacheMaxStreamingBuffer' не исправить вашу проблему? Согласно документации Apache, она должна, даже если кодировка передачи «chunked» * и * в вашем ответе нет набора Content-Length (который, вероятно, лишен «mod_wsgi», хотя это просто предположение). – robertklep
Нет, это не так - вы можете увидеть мой файл конфигурации во вторичном столбце. Что-то еще происходит. – PhilBot