it-swarm.com.ru

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

68
Russ

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

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

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

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

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

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

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

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

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

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

62
JohnW

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

27
Jeff Atwood

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

21
Gavin

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

5
Eduardo

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

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

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

5
jvenema

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

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

3
Darren Kopp

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

noCompressionForProxies

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

0
µBio