Как включить кэширование в Apache / Ubuntu Linux?

Как включить кэширование в Apache / Ubuntu Linux?

У меня есть большой (несколько мегабайт) XML-файл, который обновляется довольно часто (каждые 10 минут или реже) и получает большой трафик. Я хотел бы реализовать кэширование, чтобы уменьшить пропускную способность и нагрузку на сервер. Просматривая документы Apache, я вижу головокружительный массив параметров конфигурации, которые включают различные комбинации mod_expires, mod_headers и mod_cache (и варианты). В итоге я бегаю по кругу, и результаты не такие, как я ожидал.

Мне комфортно редактировать различные файлы конфигурации, если у меня есть представление о том, что я должен изменить. Но сейчас я ковыряюсь в темноте, и это никогда не бывает комфортным чувством. Так что, возможно, если я опишу, чего я хочу, кто-нибудь здесь сможет взять меня за руку и сказать: «Вот что тебе нужно сделать».

Периодически этот файл, назовем его "stuff.xml", обновляется и новая версия копируется в каталог. Внешний URL будет, например,http://example.com/stuff.xml. Понимаю, эта часть работает. Всякий раз, когда я запрашиваю файл, я получаю ожидаемый результат. Но файл большой, и я хочу сэкономить пропускную способность, поэтому сначала я хотел бы реализовать условную семантику GET с заголовком If-Modified-Since. Как мне это сделать? Я включил mod_headers и mod_expired и добавил раздел <FilesMatching>в свой httpd.conf, как рекомендовано в бесчисленных примерах, которые я видел в сети, но это не изменило поведение при выполнении условного запроса GET. Я всегда получаю статус 200 со всем документом. Так как же мне это реализовать?

Это сократит ненужные передачи. Я также хотел бы ограничить объем передаваемых данных. Поскольку это XML, сжатие gzip должно сэкономить мне 50% или больше. Моим следующим шагом будет каким-то образом сжать файл gzip и, если это не слишком сложно, сохранить его в памяти. Это сократит передачу данных за один доступ, а также сократит передачу данных на диск. Так как же мне реализовать этот тип кэширования?

Заранее спасибо.

решение1

Я настроил кэширование с помощьюmod_expires, в определении <VirtualHost>

ExpiresActive on
ExpiresByType text/xml "modified plus 5 minutes"   

Вы можете настроить сжатие с помощьюmod_deflate

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/xml 

решение2

Что касается того, почему If-Modified-Since не работает, я думаю, вам следует опубликовать соответствующие части вашей конфигурации (я предполагаю, что вы перезапустили Apache). Вы также можете быстро проанализировать логи, чтобы увидеть, получает ли тот же IP (возможно, тот же пользователь) этот XML-файл несколько раз. Если это всегда или в основном новые пользователи каждый раз, кэш на стороне клиента не поможет снизить нагрузку на ваш сервер.

Для сжатия вам нужно рассмотретьmod_deflate и/или mod_gzip. Здесьэто более старое сравнение журнала Linux.

Что касается кэширования памяти, я думаю, если к ней обращаются достаточно часто, чтобы ее кэшировать, то ОС, вероятно, уже кэширует ее. Если у вас нет проблем с вводом-выводом или плохой задержки файла, я бы доверил ОС выполнение своей работы.

Связанный контент