Как мне заставить работать сжатие gzip в IIS7?

Я установил статическое и динамическое сжатие для 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. Я не вижу документированной необходимости указывать типы файлов или уровень сжатия, поскольку значения по умолчанию, кажется, охватывают типы файлов, а я нигде не вижу уровень.


person Russ    schedule 24.04.2009    source источник


Ответы (7)


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

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

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

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

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

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

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

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

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

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

person JohnW    schedule 24.04.2009
comment
это помогло! Оказалось, что нашим виновником был dynamicCompressionDisableCpuUsage - по умолчанию, если вы достигнете 90%, динамическое сжатие отключено и не будет повторно включено, пока ЦП не вернется к dynamicCompressionEnableCpuUsage, который по умолчанию равен 50% (!!) - person Jeff Atwood; 07.07.2009
comment
Обратите внимание, что вам необходимо убедиться, что трассировка установлена: iis.net/ConfigReference/system .webServer / tracing / - person mhenry1384; 25.01.2011
comment
@JohnW это в какой-то мере помогло. Мне удалось получить от STATIC_COMPRESSION_NOT_SUCCESS до STATIC_COMPRESSION_SUCCESS, напрямую изменив частоту игнорирования попаданий в applicationHost.config, но он по-прежнему не возвращает сжатые данные в браузер. У меня есть отдельный поток: stackoverflow.com/q/38250376/392591 - person Jacques; 21.07.2016

У нас была аналогичная проблема, и оказалось, что 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 КБ, это не проблема.

person Jeff Atwood    schedule 07.07.2009

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

STATIC_COMPRESSION_NOT_SUCCESS 
Reason 14 
Reason NOT_FREQUENTLY_HIT

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

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

<serverRuntime frequentHitThreshold="1" />

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

person Gavin    schedule 16.10.2010

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

person Eduardo    schedule 01.03.2010

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

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

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

person jvenema    schedule 05.05.2009
comment
Я обнаружил, что все наоборот - сервер отправлял JS как application/x-javascript, но сжимал application/javascript - person Zhaph - Ben Duguid; 11.12.2012

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

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

person Darren Kopp    schedule 24.04.2009
comment
Я не понимаю, где мне нужно это делать для IIS7. Я это вижу в IIS6, но не в 7. - person Russ; 24.04.2009
comment
вы можете найти его в диспетчере IIS (inetmgr) в разделе IIS. откройте элемент «Сжатие» и установите флажок «Включить сжатие статического содержимого». - person Darren Kopp; 24.04.2009
comment
добавлена ​​ссылка на справочник по конфигурации IIS. - person Darren Kopp; 24.04.2009
comment
Я вижу настройку статического сжатия, но меня это особо не волнует. Мне нужно динамическое сжатие для aspx-страниц, и нигде в документации я не могу найти, где вам нужно указать типы файлов. - person Russ; 24.04.2009
comment
Должно быть, неправильно прочитал ваш вопрос, извиняюсь. Я, хотя вы сказали, что CSS не сжимается. Я не знаю, можете ли вы сделать это в web.config, но я знаю, что вы можете сделать это в приложении. включены ли у вас функции динамического сжатия для IIS? - person Darren Kopp; 24.04.2009
comment
Я включил его для веб-сайта, но я попытался полностью установить его в корне IIS без особого труда. - person Russ; 24.04.2009

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

noCompressionForProxies

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

person µBio    schedule 23.01.2013