Как получить сжатие gzip в IIS7? - PullRequest
68 голосов
/ 24 апреля 2009

Я установил статическое и динамическое сжатие для IIS7, а также установил два значения web.config на уровне приложения Virtual Folder. Насколько я понимаю, мне больше не нужно включать сжатие на сервере или на уровне сайта, и я могу управлять им отдельно для каждой папки, используя мой файл web.config.

В моем файле .config есть две настройки, которые я настроил для настройки gzip для моего приложения:

<httpCompression dynamicCompressionDisableCpuUsage="90"
    dynamicCompressionEnableCpuUsage="0">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
  <dynamicTypes>
    <remove mimeType="*/*"/>
    <add mimeType="*/*" enabled="true" />
  </dynamicTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
    dynamicCompressionBeforeCache="true" />

Однако, когда я запускаю приложение, я ясно вижу, что gzip не используется, потому что мои размеры страниц одинаковы. Я также использую YSlow для FireFox, что также подтверждает, что мои страницы не заархивированы.

Что мне здесь не хватает? В IIS6 было просто указать типы файлов и установить уровень сжатия от 0 до 10. Я не вижу документированной необходимости указывать типы файлов или уровень сжатия, поскольку значения по умолчанию, по-видимому, охватывают типы файлов, и я нигде не вижу уровня.

Ответы [ 7 ]

62 голосов
/ 24 апреля 2009

Во время бета-версии iis 7 на форумах forum.iis.net была ветка об этом. Оказалось, что у парня не было установленных модулей, но, похоже, вы исключили это из первого предложения.

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

  • Открыть диспетчер IIS.
  • Перейдите на свой сайт и на панели действий (в крайнем правом углу) нажмите «Отслеживание невыполненных запросов ...» в разделе «Настройка».
  • Нажмите «включить».
  • Затем в представлении функций щелкните «Правила отслеживания невыполненных запросов». Нажмите Добавить, затем введите 200 для кода состояния, затем нажмите Готово.

Если вы не видите «Отслеживание невыполненных запросов» на панели действий, вам необходимо добавить функцию на сервер - либо с помощью мастера «Добавление служб ролей» (Health and Diagnostics \ Tracing), либо через Установщик веб-платформы (Продукты \ Сервер \ IIS: трассировка), а затем закройте и снова откройте диспетчер IIS.

Затем повторите тест. Это сгенерирует некоторую информацию из журнала, которую мы рассмотрим.

Посмотрите в c: \ inetpub \ logs \ FailedReqLogFiles \ w3svcx. Вы увидите группу файлов с именем fr000xx.xml. Откройте любой из них в вашем браузере. (Кстати, если вы копируете эти файлы куда-либо, убедитесь, что файл freb.xsl есть. Кроме того, не удаляйте freb.xsl - если вы это сделаете, просто удалите весь каталог или скопируйте его из другого места, поскольку IIS только создает это один раз на папку.)

Перейдите на вкладку «Детали запроса» и выберите «Полная трассировка запроса». Поищите на странице «компресс» - вы должны найти его в нескольких областях; один раз для статического контента и один раз для динамического контента.

Если вы не найдете ни одного из них, IIS настроен неправильно. Если вы найдете их, вы должны увидеть их, после чего следует сжатие_доступа и сжатие_до. Успех говорит само за себя; «do» указывает на то, что он сделал - в моем случае он показал «OriginalSize 1462784 CompressedSize 179482»

Поскольку у вас не работает, надеюсь, вы увидите что-то другое, что поможет вам решить проблему.

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

27 голосов
/ 07 июля 2009

У нас была похожая проблема, и оказалось, что IIS7 выполняет некоторое динамическое регулирование на основе ЦП здесь ..

http://www.iis.net/ConfigReference/system.webServer/httpCompression

dynamicCompressionDisableCpuUsage

Необязательный атрибут uint.

Указывает процент использования ЦП, при котором динамическое сжатие будет отключено.

Примечание. Этот атрибут действует как верхний предел ЦП, при котором динамическое сжатие отключено. Когда загрузка ЦП падает ниже значения, указанного в атрибуте dynamicCompressionEnableCpuUsage, динамическое сжатие будет снова включено.

Значение по умолчанию: 90.


dynamicCompressionEnableCpuUsage

Необязательный атрибут uint.

Указывает процент загрузки ЦП, ниже которого будет включено динамическое сжатие. Значение должно быть в диапазоне от 0 до 100. Среднее использование ЦП рассчитывается каждые 30 секунд.

Примечание. Этот атрибут действует как нижний предел ЦП, ниже которого включено динамическое сжатие. Когда загрузка ЦП превысит значение, указанное в атрибуте dynamicCompressionDisableCpuUsage, динамическое сжатие будет отключено.

Значением по умолчанию является 50.

Обратите внимание на значения по умолчанию - если ваш IIS7 достигает 90% загрузки ЦП, он отключит весь динамический сжатый контент , пока загрузка ЦП не станет ниже 50%!

Кроме того, здесь приведены отличные рекомендации и тесты по реальной стоимости процессора GZIP.

http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx

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

21 голосов
/ 16 октября 2010

Следуя прекрасному совету JohnW, я тоже включил ведение журнала, чтобы найти виновника, хотя причина сбоя оказалась другой:

STATIC_COMPRESSION_NOT_SUCCESS 
Reason 14 
Reason NOT_FREQUENTLY_HIT

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

В соответствии с этой страницей , по умолчанию представляется, что страница должна быть дважды нажата в течение 10 секунд, чтобы быть "частым попаданием". Если вы действительно этого хотите, вы можете переопределить значение по умолчанию в applicationHost.config (% systemroot% \ Windows \ System32 \ inetsrv \ config). По крайней мере, для меня это заблокированный атрибут, поэтому вы не сможете переопределить его в своем собственном файле web.config.

<serverRuntime frequentHitThreshold="1" />

Кроме того, теперь я отмечаю, что у SO уже был такой ответ: В IIS7 сжатые файлы не остаются такими .

5 голосов
/ 01 марта 2010

Я решил свою проблему, установив динамическое сжатие при установке и удалении программ.

5 голосов
/ 05 мая 2009

В разделе system.webServer вашего файла Web.config добавьте следующие строки:

<remove fileExtension=".js" />  
<mimeMap fileExtension=".js" mimeType="application/x-javascript" />  

Схема сжатия в IIS7 включена по умолчанию, но она сопоставляет только один тип mime javascript для сжатия application / x-javascript. Добавление строки выше говорит IIS предоставить все ваши файлы .js с типом mime, что, в свою очередь, заставляет работать сжатие.

3 голосов
/ 24 апреля 2009

включить статическое сжатие. динамическое сжатие для динамических страниц, таких как asp, php, aspx и т. д.

Вот ссылка на ссылку конфигурации IIS для сжатия :

0 голосов
/ 23 января 2013

Для меня это оказалось настройкой

noCompressionForProxies

когда мы находимся на прокси ... снял себя с прокси и вуаля, сжатие.

...