programing

IIS 7.5의 GZip 압축이 작동하지 않음

mailnote 2023. 6. 25. 20:25
반응형

IIS 7.5의 GZip 압축이 작동하지 않음

IIS에서 정적 파일에 대해 GZip 압축을 지원하려고 하는데(기본적으로 활성화되어야 하지만 사용할 수 없습니다) 지금까지 작동하지 않습니다.은 섹와다과음은션() 아래 입니다.<system.webServer>에 있는 ;web.config 파일에 있는 노드;

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>

<urlCompression doStaticCompression="true" />

구글 크롬으로 해봤습니다.요청 헤더는 다음과 같습니다.

허용: text/html, application/xhtml+xml, application/xml;q=0.9,/;q=0.8

허용-문자 집합:ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate

수락 언어: en-US,en;q=0.8

캐시 제어: 캐시 없음

연결:킵얼라이브

호스트: my-website-url

Pragma: 캐시 없음

사용자 에이전트: Mozilla/5.0 (Windows NT 6.0) Apple WebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30

다음은 응답 헤더입니다.

허용 범위:바이트

내용-길이:232651

Content-Type: 어플리케이션/x-javascript

날짜: 2011년 8월 4일 목요일 08:58:19 GMT

ETag:"a69135734a50cc1:0"

최종 수정일:2011년 8월 1일 월요일 12:56:37 GMT

서버: Microsoft-IIS/7.5

X-Powered-By:ASP.NET

applicationHost.config 파일을 확인한 결과 아래와 같은 노드가 몇 개 발견되었습니다.

----

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

----

<section name="urlCompression" overrideModeDefault="Allow" />

----

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

----

<urlCompression />

내가 여기서 뭘 놓쳤지요?

많은 검색 끝에 마침내 IIS 7.5에서 작동하는 압축 기능을 찾았습니다.우선, IIS는 파일을 충분히 자주 로드하지 않는 한 압축하지 않습니다.이는 "IIS가 충분히 자주 고려하는 것은 무엇인가?"라는 질문을 제기합니다.기본값은 10초에 2번입니다.이런!

이 설정은 web.config에서 변경할 수 있지만 applicationHost.config에서 먼저 섹션의 잠금을 해제해야 합니다.다음은 명령입니다.

먼저 섹션 잠금을 해제합니다.

C:\Windows\System32\inetsrv\appcmd.exe 잠금 해제 구성/섹션:system.webServer/serverRuntime

잠금 해제된 섹션 "시스템".구성 경로 "MACHINE/WEBROOT/APPHOST"에 webServer/serverRuntime"이 있습니다.

이제 web.config 파일을 편집하고 serverRuntime 요소를 추가합니다.

version" encoding="<?xml version="1.0" encoding="UTF-8"?>
설정>
<webServer>
       <=" frequentHitTimePeriod="임계값="1" frequentHitTimePeriod="10:00:00" />
...

이 경우, 저는 10시간 내에 한 번 파일을 히트하도록 설정했습니다.필요에 따라 값을 조정할 수 있습니다.다음은 serverRuntime 요소를 설명하는 문서입니다.

http://www.iis.net/configreference/system.webserver/serverruntime

이것이 당신의 압축도 작동하도록 도와주길 바랍니다.

참고: applicationHost.config 파일에서 serverRuntime 요소를 설정할 수도 있지만, 다양한 사이트가 있는 서버와 팜이 여러 개 있고 이러한 세분화 수준에서 제어하는 것이 더 쉽기 때문에 web.config에서 변경하기로 선택했습니다.

한 가지 주의할 점은 첫 번째 히트는 일반적으로 즉시 압축되지 않은 상태로 반환되지만 나중에 요청할 때 압축을 사용하여 응답을 처리하기 위해 스레드를 회전시켜 백그라운드에서 파일을 압축한다는 것입니다.

또한 다른 클라이언트(예: IE)를 사용해 본 적이 있습니까?

서버에 동적 압축을 설치해야 합니다.IIS 아래에 기능을 추가/제거합니다.

저도 이걸 알아내는데 시간이 좀 걸렸습니다.빈도 적중 설정시스템의 임계값 특성이 1입니다.applicationHost.config 파일의 webServer/serverRuntime 노드가 이 작업을 수행해야 합니다(http://www.iis.net/ConfigReference/system.webServer/serverRuntime 참조).

관리자로 다음 명령을 실행하여 이 작업을 수행할 수 있습니다.

%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost

경고의 단어 - "자주 맞는" 개념은 압축에 특정적이지 않은 것 같습니다.이것을 설정한 결과 다른 결과가 있는지 전혀 모르겠습니다!

"시스템.웹 서버 구성에서 웹 사이트 수준의 httpCompression을 허용하지 않습니다." https://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12

구성 파일을 사용하는 이유는 무엇입니까?단지 어떤 txt 파일이 2700바이트 이상인 새로운 더미 웹 사이트를 만들어 보세요.또한 동적 압축 모듈을 설치하고 서버 및 이 더미 사이트에 대해 설정할 수도 있습니다.

한 가지 발견한 것은 리소스가 많은 WebJob이 실행되고 있기 때문에 Azure 웹 사이트가 최대 CPU 사용량을 기록하고 있다는 것입니다.우리는 위의 모든 설정을 시도했지만 아무 것도 작동하지 않았습니다.그런 다음 리소스 CPU 사용량을 확인한 결과 80% 이상이었습니다.CPU 로드가 80%이면 gzip이 작동을 멈춥니다!

이것은 댓글에만 언급되어 있기 때문에 응답으로 추가할 가치가 있다고 생각합니다. 하지만 항상 압축된 리소스를 제공하고 싶다면 이것이 진정한 해결책입니다.정적 압축 처리IgnoreHitFrequency는 큰 파일을 다운로드할 사람이 있는 것에 대해 정말로 관심이 없는 경우에만 실행 가능한 솔루션입니다.

CPU 사용률이 정적 CompressionDisableCpuUsage를 트리거하지 않는 한 위의 설정은 항상 압축됩니다.

리소스가 100% 압축되도록 하려면 다음을 사용해야 합니다.

  staticCompressionIgnoreHitFrequency true 
  staticCompressionDisableCpuUsage 100
  staticCompressionEnableCpuUsage 100

예를 들어 web.config를 사용하여 변경하려는 경우 다음을 사용할 수 있습니다.

<configuration>
  <system.webServer>
      <urlCompression doStaticCompression="true" doDynamicCompression="false" />
      <httpCompression staticCompressionIgnoreHitFrequency="true" staticCompressionDisableCpuUsage="100" staticCompressionEnableCpuUsage="100"/>
  </system.webServer>
</configuration>

이렇게 하면 CPU 사용률이 100%에 도달한 경우에도 첫 번째 요청도 압축됩니다.

IIS는 구성에 따라 앱 풀을 자동으로 재활용하므로 10시간을 설정했지만 앱 풀이 1시간마다 재설정되더라도 재설정 후 첫 번째 호출은 압축되지 않습니다.

GZip은 여전히 비용이 많이 드는 작업이므로 작업 내용을 확인해야 하며 트래픽 유형에 따라 이러한 설정을 처리하는 데 성능 문제가 발생할 수 있습니다.

자세한 내용은 https://learn.microsoft.com/en-us/IIS/wmi-provider/httpcompressionsection-class?redirectedfrom=MSDN 에서 확인하시기 바랍니다.

또한 Gzip 대신 Brotli를 사용하는 것을 고려할 경우 CPU 성능에 미치는 영향은 낮으면서 더 높은 수준의 압축을 제공합니다.https://learn.microsoft.com/en-us/iis/extensions/iis-compression/iis-compression-overview

언급URL : https://stackoverflow.com/questions/6938713/gzip-compression-on-iis-7-5-is-not-working

반응형