Статические файлы являются частью вашей темы/скина («упаковки»). Эти файлы, как правило, не должны изменяться и должны обслуживаться в зависимости от того, когда браузер в последний раз извлекал их, и устанавливать далеко вперед в будущем:
location /static {
expires max;
}
Медиафайлы являются частью контента, а не упаковки сайта. Гораздо более вероятно, что изображение изменится: первое загруженное изображение выглядит не так хорошо, лучший носитель, предоставленный производителем, и т. д. Поэтому имеет смысл основывать его срок действия на дате изменения:
location /media {
# Optional: if rollbacks are frequent
# if_modified_since before;
expires modified+1w;
}
Что касается откатов: если есть вероятность, что более старые версии образа будут восстановлены из систем резервного копирования или управления версиями, вам нужно установить это. Обратите внимание, что Django не будет устанавливать время модификации загруженного изображения на время модификации на компьютере загрузчика, поэтому новая загрузка будет новым изображением, даже если это предыдущая версия.
Теперь начинается сложная часть: инструменты оптимизации страниц предупредят вас о том, что время истечения срока действия изображений не за горами, и, таким образом, будут жаловаться на медиафайлы. Это потому, что они не могут провести различие между упаковкой и содержанием, когда речь идет об изображениях.
Еще одна вещь, которую следует отметить, это то, что после этой недели браузер будет каждый раз запрашивать изображения, а nginx будет давать ответ 304, если он не изменился. Таким образом, ваша страница будет генерировать гораздо больше запросов. Это и инструменты оптимизации страницы являются двумя причинами, по которым модифицированные не используются для изображений в дикой природе, а вместо этого используется только первая политика. Чтобы иметь дело с измененными изображениями, вы затем свяжете изображение с другим именем с тем же ресурсом (продуктом), и, таким образом, это ответственность менеджеров контента или промежуточного слоя, который переименовывает загруженные изображения в уникальное имя. Один простой трюк — называть медиа-изображения их хэшем md5 или sha1.
Даже если вы примените единую политику истечения срока действия для обслуживания медиа и статики, я все равно буду обслуживать их из разных каталогов. Причина в том, что статические файлы не должны быть доступны для записи пользователем, работающим с Django (только для пользователя, выполняющего команду управления collectstatic). Это предотвращает ошибки конфигурации или скомпрометированный пользователь Django от вмешательства в статический каталог.
person
Melvyn
schedule
20.01.2015