Полагаю, реальный ответ здесь, вероятно, заключается в том, что в данный момент нет простого способа сделать это. Я поднял ошибку Plone, чтобы позволить максимальному возрасту быть переопределенным при умеренном кэшировании
Итак, вот мое решение, которое работает, но кажется много работы по сравнению с возможностью переопределить максимальный возраст по умолчанию при умеренном кэшировании. Я определяю свою собственную операцию кэширования, которая расширяет plone.app.caching.operations.default.moderateCaching:
class CacheInApache(ModerateCaching):
""" Apache won't cache a response if max-age cache control is 0. Override ModerateCaching
and set it to 1 second.
"""
classProvides(ICachingOperationType)
title = _(u"Cache in Apache")
description = _(u"Moderate caching for Plone behind Apache. max-age set to 1")
prefix = 'cacheInApache'
maxage = 1
Зарегистрируйте это в configure.zcml
<adapter factory=".operation.CacheInApache"
name="cacheInApache" />
<utility component=".operation.CacheInApache"
name="cacheInApache" />
Затем в моем универсальном профиле установки registry.xml я настраиваю свои типы для его использования и определяю его поля.
<record name="plone.caching.interfaces.ICacheSettings.operationMapping">
<value purge="False">
<element key="plone.resource">plone.app.caching.strongCaching</element>
<element key="plone.stableResource">plone.app.caching.strongCaching</element>
<element key="plone.content.itemView">cacheInApache</element>
<element key="plone.content.feed">cacheInApache</element>
<element key="plone.content.folderView">cacheInApache</element>
<element key="plone.content.file">cacheInApache</element>
</value>
</record>
<record name="cacheInApache.smaxage">
<field type="plone.registry.field.Int">
<title>Shared maximum age</title>
<description>Time (in seconds) to cache the response in the caching proxy</description>
<required>False</required>
</field>
<value>86400</value>
</record>
<record name="cacheInApache.etags">
<field type="plone.registry.field.Tuple">
<title>ETags</title>
<description>A list of ETag component names to include</description>
<value_type type="plone.registry.field.ASCIILine" />
<required>False</required>
</field>
<value>
</value>
</record>
<record name="cacheInApache.lastModified">
<field type="plone.registry.field.Bool">
<title>Last-modified validation</title>
<description>Turn on Last-Modified headers</description>
<required>False</required>
</field>
<value>False</value>
</record>
<record name="cacheInApache.ramCache">
<field type="plone.registry.field.Bool">
<title>RAM cache</title>
<description>Turn on caching in Zope memory</description>
<required>False</required>
</field>
<value>False</value>
</record>
<record name="cacheInApache.vary">
<field type="plone.registry.field.ASCIILine">
<title>Vary</title>
<description>Name(s) of HTTP headers that must match for the caching proxy to return a cached response</description>
<required>False</required>
</field>
<value></value>
</record>
<record name="cacheInApache.anonOnly">
<field type="plone.registry.field.Bool">
<title>Only cache for anonymous users</title>
<description>Ensure logging users always get a fresh page. Note that if you are caching pages in a proxy cache, you'll still need to use a Vary response header to keep anonymous and authenticated content separate.</description>
<required>False</required>
</field>
<value>False</value>
</record>
Вы также можете определить некоторые переопределения для конкретных типов.
Если кто-нибудь может предложить более простой способ достижения этого, пожалуйста, дайте мне знать