Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как включить кэширование файлов


Как включить или отключить кэширование в Windows?

Как правило, включение дискового кэширования может повысить производительность операционной системы Windows, но в некоторых, редких случаях требуется её отключение.

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

Небольшой объем памяти кэша компенсируется высокой скоростью доступа. В кэше обычно хранится только требуемый набор данных, причем временно, в отличие от баз данных, где данные обычно хранятся полностью и постоянно.

Кэширование при записи на диск — это функция повышения производительности, появившаяся в Windows Server 2003 и Windows XP, которая позволяет операционной системе и приложениям работать быстрее, позволяя им не ждать, пока запросы на запись данных будут реально записаны на диск. Эти «отложенные записи» могут помочь Windows работать быстрее, но имеется некоторый риск, связанный с ними. Этот риск обусловлен тем, что внезапный сбой оборудования, сбой программного обеспечения или перебой в подаче электроэнергии могут привести к потере кэшированных данных. В результате Windows считает, что данные были записаны на диск, в то время как на самом деле они хранились в кэше. Кроме того, может произойти повреждение файловой системы или потеря данных.

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

Какова величина падения производительности?

В случае многократной записи небольшими порциями, разница между записью используя кэш и минуя кэш может достигать 10 и более раз.

Для сценариев, где целостность данных важнее производительности, важно, чтобы кэширование диска было отключено.

Включение и отключение кэширования диска

  1. Щелкните правой кнопкой мыши Мой компьютер и выберите команду Свойства.
  2. Перейдите на вкладку Оборудование и нажмите кнопку Диспетчер устройств.
  3. Разверните узел диски.
  4. Щелкните правой кнопкой мыши диск, на котором необходимо включить или отключить кэширование записи диска, выберите — Свойства (Рис.1).
  5. Откройте вкладку политики .
  6. Щелкните, чтобы установить или снять флажок Разрешить кэширование записи на диск (Рис.2).
  7. Нажмите кнопку ОК.
(Рис.1)(Рис.2)

По умолчанию функция кэширования дисков в операционных системах Windows включена всегда, и если вы хотите добиться от своего компьютера быстродействия, то лучше эту функцию не отключать.

Включение и отключение кэширования записи на диск вручную - Windows Server

  • Чтение занимает 2 мин

В этой статье

В этой статье описаны действия по включению или отключению кэширования записи на дисках вручную.

Исходная версия продукта:   Windows Server 2012 R2
Исходный номер статьи базы знаний:   324805

Аннотация

При использовании некоторых сторонних программ кэширование записи на диск необходимо включать и отключать. Кроме того, включение кэширования записи на диск может увеличить производительность операционной системы; Тем не менее, это может привести к потере данных в случае сбоя электросети, сбоя оборудования или сбоев программного обеспечения. В этой статье описано, как включить или отключить кэширование записи на диск.

Включение и отключение кэширования записи на диск

  1. Щелкните правой кнопкой мыши значок Мой компьютери выберите пункт свойства.
  2. Перейдите на вкладку оборудование и нажмите кнопку Диспетчер устройств.
  3. Разверните узел дисковые накопители.
  4. Щелкните правой кнопкой мыши диск, на котором нужно включить или отключить кэширование записи на диск, и выберите пункт Свойства.
  5. Перейдите на вкладку политики .
  6. Установите или снимите флажок включить кэширование записи на диске , если это необходимо.
  7. Нажмите кнопку ОК.

Для Windows Server 2008

  1. Щелкните правой кнопкой мыши компьютери выберите пункт свойства.
  2. Щелкните ссылку " Диспетчер устройств " в разделе " задачи".
  3. Разверните узел дисковые накопители.
  4. Щелкните правой кнопкой мыши диск, на котором нужно включить или отключить кэширование записи на диск, и выберите пункт Свойства.
  5. Перейдите на вкладку политики .
  6. Установите или снимите флажок включить кэширование записи на диске , если это необходимо.
  7. Нажмите кнопку ОК.

Включить, отключить кэширование записи на диск в Windows 10/8/7

Кэширование записи на диск — это функция, которая повышает производительность системы за счет включения кэширования записи на устройстве. Это функция, которая в настоящее время доступна почти на всех дисках. Преимущество кэширования записи на диск заключается в том, что он позволяет приложениям работать быстрее, позволяя им продолжать работу, не дожидаясь записи запросов на запись данных на диск.

Допустим, вы сохранили файл. Теперь, когда вы сохраняете его, Windows отмечает, что вы хотите сохранить файл на жестком диске. Эта информация временно сохраняется в памяти Windows, и позже он запишет этот файл на жесткий диск. После записи файла на жесткий диск кэш отправит в Windows подтверждение того, что файл был записан на жесткий диск, и теперь его можно безопасно удалить из кэша.

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

Если вы видите следующие сообщения об ошибках, вы можете проверить, помогает ли отключение кэширования записи на диск:

Отключить или отключить кэширование записи на диск

При желании вы можете отключить кэширование записи на диск на своем компьютере с Windows. Вы можете включить или отключить эту функцию с помощью оснастки «Управление дисками».

Выполните эту процедуру, чтобы отключить кэширование записи на диск. Откройте папку «Компьютер»> «Диск C»> вкладка «Свойства»> «Оборудование»> выберите «Диск»> нажмите кнопку «Свойства»> вкладка «Политики».

Здесь вы можете снять флажок Включить кэширование записи на устройстве . Нажмите Применить/ОК> Выход. На съемных USB-устройствах вы можете вместо этого выбрать вариант «Быстрое удаление».

Вы также можете сделать то же самое, открыв Диспетчер устройств , щелкнув правой кнопкой мыши на жестком диске и выбрав Свойства> вкладка Политики.

Обратите внимание, что после отключения кэширования записи на диск ваш жесткий диск может работать немного медленнее и может повлиять на общую производительность системы вашего компьютера с Windows.

Настройка сжатия и кэширования через .htaccess

В панелях управления Plesk и cPanel сжатие и кэширование для статических файлов настраивается через .htaccess. Для настройки кэширования используется модуль expires.

Mod_expires — модуль, который подсказывает вашему браузеру, какие статические файлы нужно кэшировать. Время хранения данных в кэше можно устанавливать в следующих значениях:

  • years,
  • months,
  • weeks,
  • days,
  • hours,
  • minutes,
  • seconds.

Настройка кэширования

Настройка expires:

  1. 1. Для настройки кэширования сайта .htaccess файл должен находиться в корневой директории вашего сайта. Если у вас нет этого файла воспользуйтесь справкой: У меня нет файла .htaccess, что делать?.
  2. 2.

    Добавьте в файл .htaccess строки следующего вида:

    Mod_expires

     <ifModule mod_expires.c> ExpiresActive On #кэшировать флэш и изображения на одну неделю ExpiresByType image/x-icon "access plus 7 days" ExpiresByType image/jpeg "access plus 7 days" ExpiresByType image/png "access plus 7 days" ExpiresByType image/gif "access plus 7 days" ExpiresByType application/x-shockwave-flash "access plus 7 days" #кэшировать css, javascript и текстовые файлы на одну неделю ExpiresByType text/css "access plus 7 days" ExpiresByType text/javascript "access plus 7 days" ExpiresByType application/javascript "access plus 7 days" ExpiresByType application/x-javascript "access plus 7 days" #кэшировать html и htm файлы на один день ExpiresByType text/html "access plus 1 day" #кэшировать xml файлы на десять минут ExpiresByType application/xhtml+xml "access plus 10 minutes" </ifModule> 

    Совет

    Не обязательно кэшировать все указанные виды статических файлов, укажите только те, которые есть на вашем сайте. В качестве примера указано оптимальное время хранения 7 дней, но вы можете установить эти значения самостоятельно.

Настройка сжатия

На серверах виртуального хостинга сжатие .htaccess для статических файлов включено по умолчанию. Статические файлы обрабатываются веб-сервером Nginx, доступа к настройке которого нет.

Проверить наличие сжатия можно при помощи ресурса.

Если вам критична настройка сжатия, рекомендуем приобрести VPS сервер.

Не работает кэширование .htaccess

Если после указанных настроек кэширование .htaccess не работает или у вас возникли сложности, обратитесь в техническую поддержку.

Облачные серверы нового поколения

Виртуализация KVM, почасовая оплата, резервные копии, готовые шаблоны, 10 доступных ОС на выбор!

Подробнее Помогла ли вам статья?

33 раза уже помогла

Как отключить кэширование файлов в Windows?

Всем привет Поговорим о том, как отключить кэширование в Windows, а также напишу минусы его и плюсы. Значит что вообще такое это кэширование виндовское и для чего оно нужно? Значит оно как бы ускоряет комп в целом, ну думаю вы и так знаете. Но вот в чем прикол, мне кажется, что это кэширование не совсем так работает, как о нем пишут в интернетах..

Дело в том, что это кэширование файлов приводит к тому, что все последующие обращения к одному и тому же файлу происходят намного быстрее. Но кэширование работает именно на уровне файлов, это стоит учесть, ибо например утилита PrimoCache (которой кстати я давно уже пользуюсь, она позволяет создать кэш из ОЗУ для жесткого диска), так она кэширует как бы не файлы, а блоки файловой системы. Как по мне, то эффективность кэширования блоков куда выше, чем файлов.

Но как бы там не было, отключать кэширование я все равно не советую, потому что так бы сказать это базовое кэширование и оно очень необходимо. Мы не знаем эффект от него, не видим просто потому, что оно по умолчанию уже включено. Даже в Windows XP по умолчанию включено это кэширование. Вот если бы винда устанавливалась с отключенным кэшированием, то потом, после некоторого времени, если бы вы включили кэширование, то вы стопудово заметили бы ускорение работы системы

Я писал, что виндовское кэширование не до конца изучено, ну или о нем просто мало есть инфы. Что я это имел ввиду? По моим наблюдениям, виндовское кэширование это нечто большее чем просто кэширование файлов. После включения кэширования его я не замечаю взрыв производительности, нет, такого нет, но то что оболочка работает быстрее, это факт. То что программы чуть быстрее открываются и закрываются, это тоже факт. Мелкие файлы также легче копировать. Загрузка рабочего стола со всеми процессами, прогами которые стоят в автозагрузке, то все это происходит немного быстрее при включенном виндовском кэшировании. Почему так, я не знаю. Но уверен, что кэширование нужно не только для файлов! Возможно что кэшируются данные, с которыми работают те или иные программы, кэшируются вызовы команд, библиотеки, ну и все остальное такое эдакое. Вы уж извините, может я и бред написал, но я вот так думаю.

Поэтому даже используя утилиту PrimoCache, я все равно не отключаю виндовское кэширование. И вам советую. Правда есть разговоры в интернетах, что в Windows 7 такое кэширование потребляет много оперативы и потом назад эту память не отдает. Ну, честно вот скажу, никогда ничего подобного у меня не было, и очень странно, ведь я с компьютером почти не расстаюсь..

Ну так вот, теперь по поводу настроек. В винде есть два вида кэширования, это кэширование дисков и кэширование файловой системы. Или это одно и тоже, я честно говоря не знаю, но вроде бы это разные настройки. То есть чтобы полностью включить или отключить кэширование в Windows, нужно пройтись по этим обоим настройкам.

Итак, первая настройка, это служба SuperFetch. Именно эта служба и обеспечивает кэширование файловой системы в виндовс. Я лично ее не отключал, вернее я пробовал ее отключить, но пришел к выводу, что лучше ее оставить включенной. Вы тоже можете провести эксперимент: отключите службу и поработайте за компом несколько недель, а потом ее включите и сравните работу. Может вы заметите разницу, а может быть и не заметите. Кому как, но если комп работает быстрее и без службы SuperFetch, то думаю что нет смысла вам ее включить. В принципе все логично..

Я сейчас покажу как отключить SuperFetch в Windows 10, но также само все можно сделать и в Windows 7. Можно ли отключить в Vista, я, честно говоря не знаю.. Но думаю что можно.. Ну так вот, открываете диспетчер задач и там идете на вкладку Службы, где нажимаете кнопку Открыть службы:

Теперь тут находим службу SuperFetch (кстати она еще называется SysMain, так что теперь знайте что это за служба) и нажимаем по ней два раза:

Потом появится вот такое небольшое окошко свойств:

Как видите, в поле Описание тут сказано кратко, что поддерживает и улучшает производительность системы. Ну, в принципе, как я уже писал, то так оно и есть. Теперь, чтобы отключить эту службу, вам нужно там где Тип запуска, то там выбрать Отключена. И потом еще нажать кнопку Остановить, ну чтобы работа службы прекратилась. Ну а чтобы включить ее обратно, то нужно все вернуть как было

Это была первая настройка. А вот вторая настройка, это я имею ввиду кэширования дисков в Windows и вот как это кэширование отключить. Открываете окно Мой компьютер, в Windows 10 вы можете сразу его и не открыть, ну мало ли, поэтому на всякий случай я покажу команду, при помощи которой можно открыть это окно. Просто зажимаете Win + R и пишите туда такое как:

explorer file://

Теперь нажимаете правой кнопкой по любому диску или разделу и выбираете там Свойства:

Откроется окошко свойств, тут вам нужно перейти на вкладку Оборудование, где у вас будут все диски, вот эта вкладка:

А внизу там есть еще кнопочока Свойства. Так вот, вам нужно выбрать диск, и потом нажать эту кнопку, чтобы открыть уже свойства устройства, ну то есть диска. В общем выбираем диск и нажимаем кнопку Свойства:

Дальше нажимаем кнопку Изменить параметры:

И вот теперь, на вкладке Политика будут две галочки, вот они:

Как видите, они у меня поставлены, если вам нужно максимально отключить виндовское кэширование, то помимо отключения службы SuperFetch, снимите и тут галочки. Но учтите, что после этих отключений, ну я имею ввиду и SuperFetch и вот это кэширование записей, очистка буфера, то после всего этого у вас винда может начать работать немного медленнее. А если у вас SSD, то может быть и не будет разницы, но если не будет разницы, то в этом в кэшировании точно нет смысла! Но это вам нет, а вот вашему SSD (если у вас именно он), то польза может и будет, ибо с включенным кэшированием обращений к SSD-диску возможно что будет меньше. Вот такие вот дела ребята, так что учитывайте все моменты при отключении кэширования..

ЗАБЫЛ КОЕ ЧТО! Я вот показал как отключить кэширование дисков, да? Ну так вот, это нужно сделать для каждого диска! То есть там в окошке выбираете диск и потом нажимаете кнопку Свойства, и потом уже отключаете кэширование. ВОТ ТАК нужно сделать с каждым диском, для каждого диска нажать кнопку Свойства, ну, думаю все понятно

Что еще сказать про кэширование? Даже не знаю.. Ну то что отключать его я не советую, это я уже написал, однако решение все равно за вами, кому-то легче с ним, а у кого-то оно вызывает только глюки. Ведь для кэширования нужна оперативка, правда Microsoft утверждает, что при необходимости, оперативка будет освобождена под нужды какой-то проги. Но как уже убедились юзеры Windows 7, это не всегда происходит именно так, хотя у меня все было нормально. Часто юзеры писали, что какая-то программа сообщает, что ей не хватает оперативки, когда ее в теории должно быть полно. А оказывается, что вся она ушла под кэширование и возвращаться не собирается. Вот такие пироги..

Итак, давайте подведем выводы. Какие плюсы у отключения кэширования?

  1. Потребление оперативной памяти самой Windows должно снизится.
  2. Работающих служб станет на одну меньше, конечно это плюс сомнительный, но чем меньше работающих служб, тем быстрее работает сама Windows.
  3. Меньше шансов, что ценная информация пропадет. В теории данные должны записываться сразу на диск, без буферной зоны в виде кэша. Ну это не то чтобы в теории, это так и должно быть.

Как видим плюсы есть, но огромных все таки нет, разве что Windows будет потреблять меньше оперативки. Но и тут прикол, некоторые юзеры писали, что даже при отключении кэширования, винда все равно продолжала кушать оперативку под какой-то кэш. Правда дело было в Windows 7.

Ну а какие минусы отключения виндовского кэширования?

  1. Некоторые программы могут работать медленнее. Копирование файлов, установка и запуск программ, закрытие программ, все эти процессы могут происходить немного медленнее. Однако это я имею ввиду если у вас жесткий диск (HDD), если же твердотельный накопитель (SSD), то никакого замедления быть не должно.
  2. Увеличится обращение к диску. В случае с жестким диском это проявляется как периодическое подтормаживание, а в случае с SSD это просто увеличит количество записи/чтения данных (что не так уж и полезно для SSD).
  3. После отключения кэширования, свободная оперативная память будет простаивать, то есть пользы от нее никакой не будет. С другой стороны доступный обьем ОЗУ будет полностью в распоряжении запущенных программ.

Вот такие дела, я не знаю что написать по поводу особых плюсов или особых минусов в кэшировании. Тут каждый выбирает сам. То что система с включенным кэшированием работает быстрее, то в этом я сам лично убедился. Если отключить кэширование, то становится больше оперативы, я это тоже заметил. Поэтому вывод можно сделать один: я показал как отключить кэширование, вам осталось просто провести эксперимент и понять, что лучше, без кэширования или с ним. Рекомендую эксперимент вести не один день, а где-то неделю, или даже две, чтобы окончательно закрыть для себя вопрос, ну как-то так..

В общем на этом все, извините если что не так, но надеюсь что все вам тут было понятно. Удачи вам в жизни и всего хорошего

На главную! кэш 18.11.2016

Кэш браузера | .htaccess

  • htaccess кэширование сохраняет содержимое веб-страницы на локальном компьютере, когда пользователь посещает ее;
  • Использование кэша браузера – веб-мастер дает указания браузерам, как следует рассматривать ресурсы.

Когда браузер отображает веб-страницу, он должен загрузить логотип, CSS файл и другие ресурсы:


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

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

  • Измените заголовки запроса ресурсов, чтобы использовать кэширование;
  • Оптимизируйте свою стратегию кэширования.

Для большинства людей единственный способ кэширования сайта htaccess заключается в том, чтобы добавить код в файл .htaccess на веб-сервере.

Файл .htaccess контролирует многие важные настройки для вашего сайта.

Приведенный ниже код указывает браузеру, что именно кэшировать и как долго это «запоминать«. Его следует добавить в начало файла .htaccess:

## EXPIRES CACHING ## <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType text/html "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 1 month" </IfModule> ## EXPIRES CACHING ##

Сохраните файл .htaccess, а затем обновите веб-страницу.

В приведенном выше коде заданы промежутки времени. Например, 1 year (1 год) или 1 month (1 месяц). Они связаны с типами файлов. Приведенный выше код устанавливает, что .jpg файлы (изображения) следует кэшировать в течение года.

Если бы вы хотели изменить это, чтобы и JPG изображения кэшировались в течение месяца, то вы бы просто заменили «1 год» на «1 месяц«. Указанные выше значения кэширования через htaccess оптимальны для большинства веб-страниц.

Описанный выше метод называется «Expires«, он помогает с кэшированием большинству новичков. После того, как вам станет проще работать с кэшированием, можете попробовать другой метод кэширования Cache-Control, который дает больше возможностей.

Возможно, что метод Expires не сработает на вашем сервере, в этом случае вы возможно захотите попробовать использовать Cache-Control.

Этот метод позволяет получить больше контроля над кэшированием страниц в браузере, но многие считают, что проще прописать все настройки один раз.

Пример использования в файле .htaccess:

# 1 Month for most static assets <filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$"> Header set Cache-Control "max-age=2592000, public" </filesMatch>

Приведенный выше код устанавливает заголовок Cache-Control в зависимости от типа файла.

Рассмотрим упомянутую выше строку кода кэширования в браузере htaccess:

# 1 Month for most static assets

Данная строка — просто примечание. Файл .htaccess игнорирует строки, начинающиеся с символа #. Это примечание рекомендуется, так как у вас может быть несколько различных наборов данных в качестве решения для кэширования файлов:

<FilesMatch ". (CSS | JPG | JPEG | PNG | GIF | JS | ICO) $">

Упомянутая выше строка говорит, что, «если файл будет одним из этих типов, то мы сделаем что-то с ним… »

Самое важное в этой строке то, что в ней перечислены различные типы файлов (CSS, JS, JPEG, PNG и т.д.) и что инструкции кэширования следует применять к этим типам файлов. Например, если вы не хотите, чтобы JPG файлы кэшировались в течение указанного периода времени, можете удалить «JPG«. Если вы хотите добавить HTML, то нужно в этой строке указать «HTML«:

Header set Cache-Control "max-age=2592000, public"

В упомянутой выше строке установлены фактические заголовки и значения:

  • Часть «Header set Cache-Control» — устанавливает заголовок;
  • Переменная «max-age=2592000» – указывает, сколько времени займет процесс кэширования (в секундах). В этом случае мы осуществляем кэширование в течение одного месяца (2592000) секунд;
  • Часть «public» сообщает о том, что это общедоступно.

Эта строка кэширования через htaccess закрывает оператор и заканчивает блок кода.

Если вы составляете список изображений, которые будут кэшироваться в течение года и более, помните, что если вы вносите изменения в свои страницы, они могут быть не видны всем пользователям. Так как пользователи обратятся к кэшируемым файлам, а не к существующим. Если есть файл, который вы периодически редактируете (например — файл CSS),то можно преодолеть проблему кэша с помощью цифрового отпечатка URL.

Получение нового (некэшируемого) файлового ресурса возможно при наличии уникального имени. Например, если файл CSS назван «main.css», то вместо этого мы могли бы назвать его «main_1.css». В следующий раз, когда мы поменяем его имя, мы можем назвать файл «main_2.css». Это полезно для файлов, которые периодически изменяются.

При кэшировании файлов htaccess необходимо указать один заголовок из пары Expires или Cache-Control max-age, а также один из заголовков Last-Modified или ETag для всех кэшируемых ресурсов. Использовать и Expires, и Cache-Control: max-age излишне, как и Last-Modified и ETag одновременно.

Данная публикация представляет собой перевод статьи «Leverage browser caching» , подготовленной дружной командой проекта Интернет-технологии.ру

Как настроить кэширование содержимого Apache в CentOS 7

× Содержание

× Поделиться этим учебником

Куда бы вы хотели этим поделиться?

  • Twitter
  • Reddit
  • Хакерские новости
  • Facebook

Поделиться ссылкой

Ссылка на руководство

× Поделиться этим учебником

Куда бы вы хотели этим поделиться?

  • Twitter
.

Включить кеширование файлов Javascript, CSS, включенных в файл JSP

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант
.Руководство по кэшированию

- HTTP-сервер Apache, версия 2.4

Этот документ дополняет mod_cache , mod_cache_disk , mod_file_cache и справочная документация htcacheclean. В нем описывается, как использовать функции кэширования HTTP-сервера Apache для ускорения работы в Интернете и обслуживание прокси, избегая при этом распространенных проблем и неправильной конфигурации.

См. Также

HTTP-сервер Apache предлагает ряд функций кэширования, которые предназначены для повышения производительности сервера в различных способами.

RFC2616 с тремя состояниями кэширование HTTP
mod_cache и его модули провайдера mod_cache_disk обеспечить интеллектуальное кэширование с поддержкой HTTP. Сам контент хранится в кеше, а mod_cache нацелен на соблюдение всех различных HTTP заголовки и параметры, управляющие кэшируемостью контента как описано в Раздел 13 RFC2616. mod_cache предназначен как для простых, так и для сложных конфигураций кеширования, где вы имеете дело с прокси-контентом, динамическим локальным контентом или необходимо ускорить доступ к локальным файлам на потенциально медленный диск.
Кэширование общих объектов с двумя состояниями ключ / значение
API кэша общих объектов (socache) и его модули провайдера предоставляют общесерверный кеш общих объектов на основе ключей / значений.Эти модули предназначены для кэширования данных низкого уровня, таких как сеансы SSL и учетные данные для аутентификации. Бэкэнды позволяют хранить данные на уровне сервера в разделяемой памяти или на уровне центра обработки данных в кэше, например как memcache или distcache.
Специализированное кэширование файлов
mod_file_cache предлагает возможность предварительной загрузки файлы в память при запуске сервера, и может улучшить доступ раз и сохранить дескрипторы файлов для файлов, к которым часто обращаются, поскольку нет необходимости переходить на диск при каждом запросе.

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

Протокол HTTP содержит встроенную поддержку встроенного кэширования. механизм описано в разделе 13 RFC2616, а mod_cache Модуль можно использовать для использования это.

В отличие от простого двухуровневого кэша ключ / значение, в котором содержимое полностью исчезает, когда больше не свежий, HTTP-кеш включает механизм для сохранения устаревшего контента и запроса исходного сервера изменилось ли это устаревшее содержимое, и если нет, сделайте его свежим очередной раз.

Запись в кэше HTTP находится в одном из трех состояний:

Свежий
Если контент достаточно новый (младше свежести срок службы ), считается свежий . An HTTP-кеш может бесплатно обслуживать свежий контент без каких-либо обращается к исходному серверу вообще.
Несвежий

Если содержимое слишком старое (старше свежести срок службы ) считается устаревшим .An Кеш HTTP должен связаться с исходным сервером и проверить, содержание еще свежо перед отправкой устаревшего содержания в клиент. Исходный сервер либо ответит заменой контент, если он еще не действителен, или в идеале исходный сервер ответьте кодом, чтобы сообщить кешу, что контент все еще свежие, без необходимости создавать или отправлять контент снова. Контент снова становится свежим, и цикл продолжается.

Протокол HTTP позволяет кешу обслуживать устаревшие данные. при определенных обстоятельствах, например, при попытке освежить данные с исходным сервером вышли из строя с ошибкой 5xx, или когда другой запрос уже находится в процессе обновления данная запись.В этих случаях заголовок Предупреждение добавляется к ответу.

Не существует
Если кеш заполнен, он оставляет за собой возможность удалить контент. из кеша, чтобы освободить место. Контент можно удалить в любой момент, и может быть устаревшим или свежим. Инструмент htcacheclean можно запускаться один раз или развертываться как демон для сохранения размера кеша в пределах заданного размера или заданного числа индексных дескрипторов.Инструмент пытается удалить устаревшее содержимое перед попыткой удалить свежий контент.

Полную информацию о том, как работает HTTP-кеширование, можно найти в Раздел 13 RFC2616.

Взаимодействие с сервером

Модуль mod_cache подключается к серверу двумя возможные места в зависимости от стоимости CacheQuickHandler директива:

Фаза быстрой обработки

Этот этап происходит очень рано во время обработки запроса, сразу после того, как запрос был проанализирован.Если содержание найденный в кеше, он обслуживается немедленно и почти вся обработка запросов не выполняется.

В этом сценарии кеш ведет себя так, как если бы он был "закреплен болтами". на "перед сервером.

Этот режим обеспечивает наилучшую производительность, так как большинство серверная обработка не выполняется. Однако этот режим также обходит фазы аутентификации и авторизации серверной обработки, поэтому этот режим следует выбирать с осторожностью, когда это важно.

запросов с заголовком «Авторизация» (например, HTTP Basic Аутентификация) не кэшируются и не обслуживаются из кеша когда mod_cache работает на этом этапе.

Обычная фаза обработчика

Эта фаза происходит в конце обработки запроса, в конце концов этапы запроса завершены.

В этом сценарии кеш ведет себя так, как если бы он был "закреплен болтами". на "к задней части сервера.

Этот режим предлагает наибольшую гибкость, поскольку существует потенциал чтобы кеширование происходило в точно контролируемой точке фильтра цепочку, а кэшированный контент можно фильтровать или персонализировать перед отправляется клиенту.

Если URL-адрес не найден в кэше, mod_cache добавит фильтр в стек фильтров, чтобы записать ответ в кеш, а затем остановиться, разрешив нормальный обработка запроса продолжается.Если содержание определено как кэшируемый, контент будет сохранен в кеш для дальнейшего обслуживания, в противном случае содержимое будет проигнорировано.

Если содержимое, обнаруженное в кэше, устарело, mod_cache Модуль преобразует запрос в условный запрос . Если исходный сервер отвечает нормальный ответ, нормальный ответ кэшируется, заменяя содержимое уже кешировано. Если исходный сервер отвечает 304 Not Modified ответ, контент снова помечается как свежий, а кешированный контент обслуживается фильтром, а не сохраняется.

Улучшение обращений к кеш-памяти

Когда виртуальный хост известен под одним из множества различных псевдонимов сервера, убедитесь, что UseCanonicalName установить на На можно значительно улучшить соотношение попаданий в кэш. Это потому, что имя хоста виртуального хоста, обслуживающего контент, используется в ключе кеша. При настройке на На виртуальные хосты с несколькими именами серверов или псевдонимами не будут создавать объекты кэшируются по-разному, и вместо этого содержимое будет кэшироваться как на каноническое имя хоста.

Срок службы свежести

Правильно сформированный контент, предназначенный для кэширования, должен объявлять явное время жизни свежести с Cache-Control поля заголовка max-age или s-maxage , или включив заголовок Expires .

В то же время, время жизни, определенное исходным сервером, может быть отменено клиентом, когда клиент представляет свои собственные Cache-Control заголовок в запросе.В этом случае, побеждает наименьшее время жизни между запросом и ответом.

Когда это время жизни отсутствует в запросе или ответа, применяется время действия по умолчанию. По умолчанию время жизни для кешированных объектов составляет один час, однако это можно легко изменить с помощью директивы CacheDefaultExpire .

Если ответ не включает заголовок Expires , но содержит включить заголовок Last-Modified , mod_cache может сделать вывод о продолжительности жизни на основе эвристики, которая может быть контролируется с помощью директивы CacheLastModifiedFactor .

Для локального контента или для удаленного контента, который не определяет свой собственный Expires header, mod_expires можно использовать для точно настроить срок свежести, добавив max-age и Истекает .

Максимальный срок свежести можно также контролировать с помощью CacheMaxExpire .

Краткое руководство по условным запросам

Когда содержимое из кэша истекает и становится устаревшим, а не передать исходный запрос, httpd изменит запрос, чтобы сделать это условно вместо этого.

Когда заголовок ETag существует в исходной кэшированной ответ, mod_cache добавит If-None-Соответствует заголовку запросу к исходному серверу. Когда заголовок Last-Modified существует в исходном кешированный ответ, mod_cache добавит If-Modified-Since заголовок запроса к источнику сервер. При выполнении любого из этих действий запрос условно .

Когда условный запрос получен исходным сервером, исходный сервер должен проверить, является ли ETag или Last-Modified параметр был изменен в соответствии с запросом. Если нет, то origin должен ответить кратким ответом «304 Not Modified». Этот сигналы кешу о том, что устаревшее содержимое еще свежо, должны быть используется для последующих запросов до нового времени жизни контента снова достигается.

Если содержимое изменилось, оно обслуживается так, как если бы Запрос изначально не был условным.

Условные запросы дают два преимущества. Во-первых, при изготовлении таких запрос к исходному серверу, если контент из источника соответствует содержимому в кеше, это можно легко определить и без накладных расходов на перенос всего ресурса.

Во-вторых, хорошо спроектированный исходный сервер будет спроектирован в такой способ, которым условные запросы будут значительно дешевле производим чем полный ответ. Для статических файлов обычно все задействован вызов stat () или аналогичный системный вызов, чтобы посмотрите, изменился ли файл по размеру или времени модификации.Таким образом, даже локальный контент может по-прежнему обслуживаться из кеша быстрее, если он не изменилось.

Серверы

Origin должны приложить все усилия для поддержки условных запросы, как это практически возможно, однако если условные запросы не поддерживается, источник ответит, как если бы запрос не был условно, и кеш будет реагировать, как если бы содержимое было изменено и сохраните новый контент в кеш. В этом случае кеш будет вести себя как простой кеш с двумя состояниями, где контент эффективно либо свежие, либо удаленные.

Что можно кэшировать?

Полное определение того, какие ответы могут быть кэшированы по протоколу HTTP. кеш определяется в RFC2616, раздел 13.4 Кэшируемость ответа, и его можно резюмировать как следует:

  1. Кэширование должно быть включено для этого URL. См. Директивы CacheEnable и CacheDisable .
  2. Если ответ имеет код состояния HTTP, отличный от 200, 203, 300, 301 или 410 он также должен указывать заголовок «Expires» или «Cache-Control».
  3. Запрос должен быть запросом HTTP GET.
  4. Если ответ содержит заголовок «Авторизация:», он должен также содержат параметр s-maxage, must-revalidate или public в заголовке «Cache-Control:», иначе он не будет кэшироваться.
  5. Если URL-адрес включал строку запроса (например, из HTML-формы GET метод) он не будет кэшироваться, если в ответе не указан явное истечение срока действия путем включения заголовка "Expires:" или максимального возраста или директива s-maxage заголовка "Cache-Control:" согласно RFC2616 Разделы 13.9 и 13.2.1.
  6. Если ответ имеет статус 200 (ОК), ответ должен также включать по крайней мере один из Etag, Last-Modified или заголовки Expires или директивы max-age или s-maxage для заголовок "Cache-Control:", если только CacheIgnoreNoLastMod директива использовалась, чтобы требовать обратного.
  7. Если ответ включает параметр «private» в «Cache-Control:» заголовок, он не будет сохранен, если CacheStorePrivate был раньше требовали иначе.
  8. Аналогичным образом, если ответ включает в себя опцию «no-store» в Заголовок "Cache-Control:" не будет сохранен, если CacheStoreNoStore был используемый.
  9. Ответ не будет сохранен, если он включает заголовок "Vary:" содержащий совпадение "*".

Что не следует кэшировать?

Это должно быть на усмотрение клиента, создающего запрос, или источника сервер строит ответ, чтобы решить, действительно ли контент должен быть кэшируемым или нет, правильно установив Заголовок Cache-Control и mod_cache должен оставьте в покое, чтобы уважать пожелания клиента или сервера в зависимости от ситуации.

Контент, чувствительный ко времени или изменяющийся в зависимости от сведения о запросе, не охваченные согласованием HTTP, не следует кэшировать. Этот контент должен объявить себя некэшируемым используя заголовок Cache-Control .

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

Контент, который зависит от заголовков запроса, предоставленных клиентом, может быть кэшируется за счет интеллектуального использования ответа Vary заголовок.

Переменное / согласованное содержимое

Когда исходный сервер предназначен для ответа с другим контентом на основе значения заголовков в запросе, например для обслуживания несколько языков в одном URL, механизм кеширования HTTP делает это можно кэшировать несколько вариантов одной и той же страницы по одному и тому же URL.

Это делается исходным сервером, добавляющим заголовок Vary чтобы указать, какие заголовки должны приниматься во внимание кешем, когда определение того, отличаются ли два варианта друг от друга.

Если, например, получен ответ с изменяемым заголовком, например;

Варьировать: переговоры, accept-language, accept-charset

mod_cache будет обслуживать кэшированный контент только для запрашивающие с заголовками accept-language и accept-charset совпадающие с исходным запросом.

Несколько вариантов содержимого можно кэшировать бок о бок, mod_cache использует заголовок Vary и соответствующие значения заголовков запросов, перечисленных в Vary решить, какой из множества вариантов вернуть клиенту.

Кэширование на диск

Модуль mod_cache полагается на определенное внутреннее хранилище реализации для управления кешем и для кэширования на диск mod_cache_disk предназначен для поддержки этого.

Обычно модуль настроен таким образом;

 CacheRoot "/ var / cache / apache /" CacheEnable disk / CacheDirLevels 2 CacheDirLength 1 

Важно отметить, что поскольку кэшированные файлы хранятся локально, операционная система Кэширование в памяти обычно применяется и к их доступу. Так хотя файлы хранятся на диске, если к ним часто обращаются вполне вероятно, что операционная система будет гарантировать, что они действительно служил по памяти.

Понимание кэш-хранилища

Для хранения элементов в кеше mod_cache_disk создает 22-символьный хэш запрашиваемого URL. Этот хеш включает имя хоста, протокол, порт, путь и любые аргументы CGI для URL-адреса, а также элементы, определенные заголовком Vary, чтобы гарантировать, что несколько URL-адреса не конфликтуют друг с другом.

Каждый символ может быть любым из 64-х различных символов, что означает что всего существует 64 ^ 22 возможных хэша.Например, URL-адрес может хешируется до xyTGxSMO2b68mBCykqkp1w . Этот хеш используется в качестве префикса для именования файлов, относящихся к этому URL-адресу в кеш, однако сначала он разбивается на каталоги в соответствии с CacheDirLevels и CacheDirLength директивы.

CacheDirLevels указывает, сколько уровней подкаталога должно быть, и CacheDirLength указывает, сколько символов должно быть в каждом каталоге.С участием в приведенном выше примере настроек хеш будет преобразован в префикс имени файла как / var / cache / apache / x / y / TGxSMO2b68mBCykqkp1w .

Общая цель этого метода - уменьшить количество подкаталоги или файлы, которые могут находиться в определенном каталоге, поскольку большинство файловых систем замедляются по мере увеличения этого числа. С участием установка "1" для CacheDirLength на любом уровне может быть не более 64 подкаталогов.При значении 2 может быть 64 * 64 подкаталога и так далее. Если у вас нет веской причины не делать этого, используйте настройку "1" для CacheDirLength Рекомендовано.

Настройка CacheDirLevels зависит от того, сколько файлов вы планируете хранить в кеше. С настройкой "2", использованной в приведенном выше примере, большая Всего можно создать 4096 подкаталогов. С участием Кэшируется 1 миллион файлов, это примерно 245 кэшированных файлов. URL-адреса на каталог.

Каждый URL использует как минимум два файла в хранилище кешей. Обычно есть файл ".header", который включает метаинформацию о URL-адрес, например, когда истекает срок его действия, и файл ".data" который представляет собой дословную копию контента, который будет обслуживаться.

В случае согласования содержимого через заголовок "Vary", Каталог ".vary" будет создан для рассматриваемого URL. Этот в каталоге будет несколько файлов ".data", соответствующих иначе согласованный контент.

Обслуживание дискового кэша

Модуль mod_cache_disk не пытается регулировать объем дискового пространства, используемого кешем, хотя он изящно устранит любую ошибку диска и будет вести себя так, как если бы кеша никогда не было.

Вместо httpd предоставляется инструмент htcacheclean, который позволяет периодически чистить кеш. Определение того, как часто запускать htcacheclean и какой целевой размер использование кеша довольно сложно, и может потребоваться метод проб и ошибок, чтобы выбрать оптимальные значения.

htcacheclean имеет два режима операция. Его можно запускать как постоянный демон или периодически из cron. htcacheclean может занять до часа или больше для обработки очень больших (десятки гигабайт) кешей, и если вы запуская его из cron, рекомендуется определить, как долго run принимает, чтобы избежать одновременного запуска более одного экземпляра.

Также рекомендуется выбрать соответствующий "хороший" уровень для htcacheclean, чтобы инструмент не приводил к чрезмерному увеличению нагрузки на диск, пока сервер работает.


Рисунок 1 : Типичный Последовательность роста / очистки кеша.

Потому что mod_cache_disk сам не обращает внимания сколько места используется, вы должны убедиться, что htcacheclean настроен на оставьте достаточно места для выращивания после уборки.

Кэширование в memcached

Использование модуля mod_cache_socache , mod_cache может кэшировать данные из различных реализаций (также известных как «поставщики»).Используя mod_socache_memcache Модуль , например, можно указать, что memcached должен использоваться как механизм внутреннего хранилища.

Обычно модуль имеет такую ​​конфигурацию:

 CacheEnable socache / CacheSocache memcache: memcd.example.com: 11211 

Дополнительные сервера memcached могут быть указаны добавляя их в конец кэша памяти CacheSocache: строка через запятую:

 CacheEnable socache / CacheSocache кэш памяти: mem1.example.com:11211,mem2.example.com:11212 

Этот формат также используется с другими mod_cache_socache провайдеры. Например:

 CacheEnable socache / CacheSocache shmcb: / путь / к / файлу данных (512000) 
 CacheEnable socache / База данных CacheSocache: / путь / к / файлу данных 

На платформах, где файловая система может работать медленно или ручки дороги, существует возможность предварительной загрузки файлов в память при запуске.

В системах, где файлы открываются медленно, существует возможность открыть файл при запуске и кэшировать дескриптор файла. Эти параметры могут помочь в системах, где доступ к статическим файлам медленный.

Кэширование дескрипторов файлов

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

файл кэша

Самая простая форма кэширования в httpd - дескриптор файла. кеширование обеспечивается mod_file_cache . Вместо кеширования file-contents, этот кеш поддерживает таблицу дескрипторов открытых файлов. Файлы для кэширования таким образом указываются в файле конфигурации с помощью файл кэша директива.

CacheFile директива указывает httpd открыть файл при его запуске и повторно использовать этот дескриптор файла для всего последующего доступа к этому файлу.

 CacheFile /usr/local/apache2/htdocs/index.html 

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

Хотя используется CacheFile не приводит к кэшированию содержимого файла как такового, это означает что если файл изменяется во время работы httpd, эти изменения будут не быть поднятым.Файл будет постоянно обслуживаться в том виде, в котором он был при запуске httpd.

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

Кэширование в памяти

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

Системная память не дешевая, байт за байтом она намного лучше дорогой тип хранилища, и важно убедиться, что он используется эффективно. Кэшируя файлы в памяти, вы уменьшаете количество память, доступная в системе.Как мы увидим, в случае эксплуатации системное кеширование, это не столько проблема, сколько при использовании Собственное кэширование в памяти httpd, важно убедиться, что вы не выделяйте кешу слишком много памяти. В противном случае система будет вынужден заменить память, что, вероятно, ухудшит спектакль.

Кэширование операционной системы

Практически все современные операционные системы кэшируют файлы-данные в управляемой памяти. непосредственно ядром.Это мощная функция, и для большинства часть операционных систем понимает это правильно. Например, в Linux давайте посмотрим на разница во времени, необходимом для чтения файла в первый раз и второй раз;

 colm @ coroebus: ~ тестовый файл $ time cat> / dev / null реальный 0m0.065s пользователь 0m0.000s sys 0m0.001s colm @ coroebus: ~ тестовый файл $ time cat> / dev / null реальный 0m0.003s пользователь 0m0.003s sys 0m0.000s 

Даже для этого небольшого файла огромная разница в количестве времени, необходимого для чтения файла.Это потому, что ядро ​​кэшировало содержимое файла в памяти.

Обеспечивая наличие "свободной" памяти в вашей системе, вы можете что все больше и больше файлового содержимого будет храниться в этом кеше. Этот может быть очень эффективным средством кэширования в памяти и не требует лишняя настройка httpd вообще.

Кроме того, поскольку операционная система знает, когда файлы удален или изменен, он может автоматически удалять содержимое файла из кешируйте при необходимости.Это большое преимущество перед httpd в памяти. кэширование, которое не знает, когда файл был изменен.

Несмотря на производительность и преимущества автоматической операционной системы кэширование есть некоторые обстоятельства, при которых кэширование в памяти может быть лучше выполняется httpd.

Кэширование MMapFile

mod_file_cache предоставляет MMapFile директива, которая позволяет httpd отображать содержимое статического файла в память по адресу время начала (с помощью системного вызова mmap).httpd будет использовать в памяти содержимое для всех последующих обращений к этому файлу.

 MMapFile /usr/local/apache2/htdocs/index.html 

Как и CacheFile директива, любая изменения в этих файлах не будут приняты httpd после того, как он начал.

MMapFile директива не отслеживает, сколько памяти она выделяет, поэтому вы должны убедиться, что не злоупотребляете директивой.Каждый ребенок httpd процесс будет копировать эту память, поэтому это критически важно чтобы гарантировать, что отображаемые файлы не настолько велики, чтобы вызвать система подкачки памяти.

Авторизация и контроль доступа

Использование mod_cache в состоянии по умолчанию, где CacheQuickHandler установлен на На очень похоже на подключенный кеширующий обратный прокси к передней части сервера.Запросы будут обслуживаться модулем кеширования если он не определяет, что исходный сервер следует запрашивать так же, как внешний кеш будет, и это радикально изменит модель безопасности httpd.

По мере обхода иерархии файловой системы для проверки потенциальных .htaccess файлов - очень дорогая операция, частичное поражение точки кеширования (для ускорения запросов), mod_cache не принимает решения о том, кэшируется ли организация авторизована для обслуживания.Другими словами; если mod_cache кэшировал некоторый контент, он будет обслуживаться из кеша, пока срок хранения этого содержимого не истек.

Если, например, ваша конфигурация разрешает доступ к ресурсу по IP адрес, вы должны убедиться, что это содержимое не кэшируется. Ты можешь это сделать с помощью CacheDisable директива или mod_expires . Не отмечено флажком, mod_cache - очень похоже на обратный прокси - будет кешировать контент, когда он обслуживается, а затем обслуживает его любому клиенту на любом IP адрес.

Когда используется CacheQuickHandler директива установлена ​​на Off , полный набор обработки запросов фазы выполняются, а модель безопасности остается неизменной.

Локальные эксплойты

Поскольку запросы к конечным пользователям могут обслуживаться из кеша, кеш сам по себе может стать целью для тех, кто хочет испортить или помешать содержание. Важно помнить, что кеш должен вообще раз будет доступен для записи пользователем, от имени которого запущен httpd.Это в разительный контраст с обычно рекомендуемой ситуацией поддержания все содержимое недоступно для записи пользователем Apache.

Если пользователь Apache скомпрометирован, например, из-за ошибки в процесс CGI, возможно, что кэш может быть целевым. когда используя mod_cache_disk , относительно легко вставить или изменить кэшированный объект.

Это представляет несколько повышенный риск по сравнению с другими типы атак можно совершить как пользователь Apache.Если ты используя mod_cache_disk , вы должны иметь это в виду - убедитесь, что вы обновили httpd, когда будут объявлены обновления безопасности и запускать процессы CGI от имени пользователя, отличного от Apache, если возможно, с помощью suEXEC.

Отравление кэша

При запуске httpd в качестве кэширующего прокси-сервера есть также возможность так называемого отравления кеша. Отравление кеша - широкая термин для атак, в которых злоумышленник заставляет прокси-сервер получить неверный (и обычно нежелательный) контент из источника сервер.

Например, если DNS-серверы, используемые вашей системой, запускают httpd уязвимы для отравления кеша DNS, злоумышленник может контролировать где httpd подключается при запросе контента с исходного сервера. Другой пример - так называемые атаки с использованием HTTP-запросов.

Этот документ не подходит для подробного обсуждения контрабанды HTTP-запросов (вместо этого попробуйте свою любимую поисковую систему) однако важно знать, что можно сделать серию запросов, и использовать уязвимость в источнике веб-сервер, так что злоумышленник может полностью контролировать контент получено прокси.

Отказ в обслуживании / очистка кеша

Механизм Vary позволяет использовать несколько вариантов одного и того же URL-адреса. кешируются бок о бок. В зависимости от значений заголовка, предоставленных клиентом, кеш выберет правильный вариант для возврата клиенту. Этот механизм может стать проблемой, если попытаться изменить заголовок, который, как известно, содержит широкий диапазон возможных значений в нормальное использование, например заголовок User-Agent .В зависимости от от популярности конкретного веб-сайта тысячи или миллионы повторяющиеся записи в кеше могут быть созданы для одного и того же URL-адреса, переполнение из других записей в кеше.

В других случаях может потребоваться изменить URL-адрес определенного ресурс по каждому запросу, обычно путем добавления строки "cachebuster" в URL-адрес. Если этот контент объявлен кешируемым сервером для значительный срок свежести, эти записи могут вытеснить законные записи в кеше.Пока mod_cache обеспечивает CacheIgnoreURLSessionIdentifiers директиву, эту директиву следует использовать с осторожностью, чтобы гарантировать, что нисходящие прокси или кеши браузера не подвергаются такому же отрицанию вопроса обслуживания.

.

Настроить кэширование вывода IIS 7

  • 7 минут на чтение

В этой статье

Тали Смит

Internet Information Services (IIS) включает функцию кэша вывода, которая может кэшировать динамическое содержимое PHP (или вывод из Microsoft® ASP.NET, классического ASP или других динамических страниц) в памяти. Это может привести к значительному повышению производительности, поскольку сценарий, используемый для генерации динамического вывода, не нужно запускать для каждого запроса.Кэш может изменять вывод, который кэшируется на основе значений строки запроса, а также заголовков HTTP, отправленных от клиента на сервер. Кэш также интегрирован с драйвером режима ядра Http.sys, что повышает производительность.

Когда использовать кэширование вывода

Веб-контент можно разделить на две основные категории: статический контент и динамический контент.

  • Статическое содержимое не меняется от запроса к запросу. Контент, который возвращается в веб-браузер, всегда один и тот же.Примеры статического содержимого включают файлы HTML, JPG или GIF.
  • Выводится динамическое содержимое, которое изменяется при каждом запросе. Примеры включают содержимое ASP.NET или PHP.

Между этими двумя категориями находится полудинамический контент. Представьте себе динамическую страницу ASP.NET, которая выполняет запрос к базе данных. Нет причин выполнять этот запрос при каждом запросе, если базовые таблицы базы данных меняются нечасто.

IIS автоматически кэширует статическое содержимое (например, HTML-страницы, изображения и таблицы стилей), поскольку эти типы содержимого не меняются от запроса к запросу.IIS также обнаруживает изменения в файлах, когда вы делаете обновления, и IIS очищает кеш по мере необходимости.

Функция кэширования вывода IIS предназначена для полудинамического содержимого. Он позволяет кэшировать статические ответы для динамических запросов и повысить масштабируемость.

Обратите внимание, что не каждая динамическая страница может использовать кэш вывода. Страницы с высокой степенью персонализации (например, корзины покупок или транзакции электронной коммерции) не являются хорошими кандидатами, потому что динамический вывод вряд ли будет запрашиваться повторно, а память, используемая для кеширования содержимого, будет потрачена впустую.Содержимое, которое выводится в результате запроса типа POST в HTML-форму, также не кэшируется.

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

Выберите политику кэширования

IIS поддерживает два типа политик кеширования:

  • variableByQuerystring, в котором URL-адрес тот же, но значение строки запроса меняется.
  • varybyHeaders, которые могут изменять кэш в зависимости от заголовков HTTP, отправляемых от клиента на сервер.

Сделать кеш недействительным

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

IIS поддерживает два способа аннулирования динамического содержимого:

  • Используйте простой период ожидания - свойство конфигурации - CacheForTimePeriod.
  • Обнаружить изменение базового ресурса - свойство конфигурации - CacheUntilChange.Используйте этот тип схемы аннулирования только в том случае, если вы хотите, чтобы кэш очищался при изменении базового ресурса.

Настроить пригодность кеша

Даже если вы включите кэширование вывода, IIS не кэширует запрос немедленно. Его нужно запросить несколько раз, прежде чем IIS сочтет запрос «подходящим для кеширования». Достаточность кеширования можно настроить в разделе ServerRuntime, описанном в статье ServerRuntimeSection Class.

Два свойства определяют пригодность кеша:

  • частыйHitTimePeriod
  • частыйHitThreshold

Запрос кэшируется только в том случае, если более запросов для кэшируемого URL-адреса поступает в пределах .Значение по умолчанию для partialHitTimePeriod - 10 секунд. Значение по умолчанию для partialHitThreshold - 2 хита.

Настройка кэширования вывода с помощью диспетчера IIS

Кэш довольно легко настроить с помощью функции пользовательского интерфейса в новом инструменте администрирования IIS.

  1. В меню Пуск щелкните Администрирование , а затем щелкните Диспетчер информационных служб Интернета (IIS) .

  2. Найдите свое приложение в древовидной структуре слева.

  3. Выберите пункт меню Кэширование вывода .

  4. В правом столбце щелкните Добавить в меню Действие . Здесь вы можете добавить свое правило кэширования вывода.

  5. В поле Расширение имени файла , например, введите .php , а затем выберите Кэширование в пользовательском режиме .

  6. Щелкните Advanced , а затем установите флажок Строковые переменные запроса .

  7. Введите соответствующие переменные в текстовое поле Строковые переменные запроса .

    Рисунок 1. Пример кэширования вывода

Настроить кэширование вывода через файл Web.config

Вы также можете настроить функцию кэширования в локальном файле Web.config, который находится в каталоге содержимого. Ниже приведен пример конфигурации, необходимой для страницы ShowStockPrice.asp с параметром variableByQueryString, равным * (что означает кэширование всех уникальных вариантов параметров строки запроса) и таймаутом в 1 секунду.

  <конфигурация>   <кэширование> <профили>        

Если вы хотите кэшировать эти данные в ядре для еще большей производительности, вам просто нужно изменить атрибут политики на kernelCachePolicy.

Примечание

Microsoft ASP.NET уже включает функцию кеширования вывода; Функция кэша вывода IIS работает параллельно с кешем ASP.NET и работает для всех типов приложений.

Проверить счетчики производительности

Чтобы увидеть производительность в кэше вывода, вы можете посмотреть счетчики кэша вывода в мониторе надежности и производительности.

  1. В меню Пуск щелкните Администрирование , а затем щелкните Монитор надежности и производительности .(В Windows Vista® или Windows® 7 средства администрирования находятся на панели управления.)
  2. Выберите Performance Monitor в древовидной структуре справа, а затем щелкните + на панели инструментов.
  3. Перейдите к счетчику кэша веб-служб и щелкните его, чтобы открыть.
  4. Добавьте счетчик Total URIs Cached .

Если вы запустите тест производительности, вы увидите, что количество кэшированных URI увеличивается с количеством запрашиваемых вами элементов.

Использовать кэширование в режиме ядра

Кэш вывода IIS поддерживает две политики кеширования:

  • Политика кэша вывода пользовательского режима, которая использует кэш, находящийся в рабочем процессе IIS.
  • Политика кеширования режима ядра, которая использует кэш, расположенный в Http.sys, драйвере режима ядра.

Кэширование содержимого в режиме ядра позволяет повысить производительность веб-сайта. Пример использования кэширования в режиме ядра можно найти в статье IIS Output Caching.

Обратите внимание, что есть два существенных различия между кешем вывода в пользовательском режиме и в режиме ядра.

  • Кэш вывода режима ядра не поддерживает модули и функции, которые должны работать в пользовательском режиме, такие как аутентификация или авторизация. Например, если включены такие схемы проверки подлинности, как базовая проверка подлинности или проверка подлинности Windows®, политика кэширования не работает. Контент обслуживается, но не кэшируется. Вы можете найти более подробную информацию о том, почему ответы могут не кэшироваться в режиме ядра, в этой статье базы знаний.
  • Кэш вывода в режиме ядра поддерживает атрибутariByHeaders, но не поддерживает атрибут variableByQuerystring.

Устранение неполадок кэширования

Буферизация событий неудачного запроса (FREB) - лучший способ узнать, кэшируется ли ваш запрос; вы также можете узнать, почему запрос не кэшируется. Например, событие HTTPSYS_CACHEABLE в журнале FREB может сообщить вам, что запрос не кэшируется, поскольку кеш режима ядра не включен.

Чтобы узнать, какой контент кэшируется в режиме ядра, можно использовать следующую команду:

  netsh http показать cachestate  

Кэшируйте самые популярные страницы

Вы можете настроить кэш вывода для кеширования только вашей страницы по умолчанию (наиболее часто запрашиваемой страницы):

  1. Создайте файл с именем default.aspx в каталоге % systemdrive% \ inetpub \ wwwroot \ <ваше приложение> и добавьте следующий код:

      <% = DateTime.Now%>  
  2. В меню Пуск щелкните Администрирование , а затем щелкните Диспетчер информационных служб Интернета (IIS) .

  3. Используйте представление в виде дерева слева, чтобы перейти к своему приложению.

  4. Щелкните Content View внизу страницы.

  5. Выберите документ по умолчанию (например, страницу Default.aspx).

  6. В меню Действия справа щелкните Перейти к представлению функции . Каждый настраиваемый параметр теперь применяется только к документу по умолчанию.

  7. Откройте настройку Правила кэширования вывода .

  8. Добавьте .aspx в качестве расширения файла.

  9. Выберите Кэширование в режиме ядра , выберите В интервале времени , включите Мониторинг кэшированных файлов, , а затем введите временной интервал, например 00:00:30 .

  10. Перейдите к http: // localhost // <ваше приложение> с помощью Windows® Internet Explorer®. Постоянно обновляя страницу (нажмите Ctrl + F5 , чтобы убедиться, что вы не используете кеш браузера), вы видите, что время не меняется в течение 30 секунд.

См. Также

.

Смотрите также