2009-04-24 30 views
68

Tôi đã cài đặt nén tĩnh và động cho IIS7, cũng như cài đặt hai giá trị web.config ở cấp ứng dụng của tôi Virtual Folder. Theo tôi hiểu nó, tôi không cần phải cho phép nén tại máy chủ, hoặc cấp trang web nữa, và tôi có thể quản lý nó trên một cơ sở mỗi thư mục bằng cách sử dụng tệp web.config của tôi.Làm cách nào để có được tính năng nén gzip trong IIS7?

Tôi có hai thiết lập trong file .config của tôi mà tôi đã thiết lập để tùy chỉnh gzip cho ứng dụng của tôi:

<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" /> 

Tuy nhiên, khi tôi chạy các ứng dụng, tôi có thể thấy rõ gzip mà không được sử dụng, bởi vì tôi kích thước trang giống nhau. Tôi cũng đang sử dụng YSlow cho FireFox, điều này cũng xác nhận rằng các trang của tôi không bị gzip.

Tôi thiếu gì ở đây? Trong IIS6 nó là một vấn đề đơn giản của việc xác định các loại tập tin, và thiết lập mức độ nén giữa 0-10. Tôi không thấy nhu cầu được ghi lại để chỉ định các loại tệp hoặc mức nén, vì các giá trị mặc định dường như bao gồm các loại tệp và tôi không thấy cấp ở bất kỳ đâu.

+0

0 xuống bỏ phiếu \t hãy có một cái nhìn vào bài đăng này: stackoverflow.com/a/7634875/1131855 tôi đã không thể chỉnh sửa applicationHost.config qua Notepad ++. Liên kết này đề nghị một lệnh giao diện điều khiển mà làm việc cho tôi –

Trả lời

61

Có một thread trên forums.iis.net về vấn đề này trong IIS 7 beta. Hóa ra anh chàng không có các mô-đun được cài đặt, nhưng có vẻ như bạn đã loại trừ điều đó ra khỏi câu mở đầu của bạn.

Lời khuyên quan trọng của Microsofts dành cho anh là bật truy tìm yêu cầu không thành công để tìm hiểu điều gì đã xảy ra. Đây có thể là một trong những tính năng được đánh giá thấp nhất của IIS7, nhưng chắc chắn là một trong những tính năng mạnh nhất.

  • Mở trình quản lý IIS.
  • Chuyển đến trang web của bạn và trên ngăn tác vụ (ở bên phải rất xa), nhấp vào 'Không theo dõi yêu cầu không thành công ...' trong phần 'Định cấu hình'.
  • Nhấp vào 'bật'.
  • Sau đó, trong chế độ xem tính năng, hãy nhấp vào 'Không thể yêu cầu quy tắc truy tìm'. Nhấp vào thêm, tiếp theo, nhập 200 cho mã trạng thái, tiếp theo, nhấp vào kết thúc.

Nếu bạn không thấy "Không yêu cầu truy tìm" trong ngăn tác vụ, bạn sẽ cần phải thêm đối tượng địa lý vào máy chủ - hoặc sử dụng thuật sĩ "Thêm vai trò dịch vụ" (Health and Diagnostics \ Tracing) hoặc thông qua Trình cài đặt Nền tảng Web (Sản phẩm \ Server \ IIS: Truy tìm), rồi đóng và mở lại Trình quản lý IIS.

Tiếp theo, chạy lại thử nghiệm của bạn. Điều này sẽ tạo ra một số thông tin nhật ký để chúng tôi kiểm tra.

Tìm trong c: \ inetpub \ logs \ FailedReqLogFiles \ w3svcx. Bạn sẽ thấy một loạt các tập tin có tên fr000xx.xml. Mở bất kỳ một trong số chúng trong trình duyệt của bạn. (Bằng cách này, nếu bạn sao chép các tệp này ở bất kỳ đâu, hãy đảm bảo rằng tệp freb.xsl ở đó. Ngoài ra, đừng xóa freb.xsl - nếu bạn làm vậy, chỉ cần xóa toàn bộ thư mục hoặc sao chép từ một vị trí khác, vì IIS chỉ tạo nó một lần cho mỗi thư mục.)

Nhấp vào tab 'chi tiết yêu cầu' và chọn 'theo dõi yêu cầu hoàn chỉnh'. Tìm kiếm trang để 'nén' - bạn sẽ tìm thấy nó trong một số lĩnh vực; một lần cho nội dung tĩnh và một lần cho nội dung động.

Nếu bạn không tìm thấy một trong số chúng, IIS không được định cấu hình chính xác.Nếu bạn tìm thấy chúng, bạn sẽ thấy chúng theo sau là một compression_success và một compression_do. Thành công là tự giải thích; 'do' cho biết nó đã làm gì - trong trường hợp của tôi, nó cho thấy "OriginalSize 1462784 CompressedSize 179482"

Vì máy của bạn không hoạt động, hy vọng bạn sẽ thấy một thứ gì đó khác giúp bạn giải quyết vấn đề.

Đảm bảo bạn tắt tính năng này khi bạn đã hoàn tất bằng cách tắt truy tìm yêu cầu không thành công trong ngăn tác vụ cho trang web của bạn.

+13

điều này đã giúp! hóa ra thủ phạm của chúng tôi là dynamicCompressionDisableCpuUsage - theo mặc định, nếu bạn nhấn 90% nén động bị vô hiệu hóa và sẽ không được kích hoạt lại cho đến khi CPU quay trở lại dynamicCompressionEnableCpuUsage mặc định là 50% (!!) –

+4

Lưu ý rằng bạn cần đảm bảo truy tìm được cài đặt: http://www.iis.net/ConfigReference/system.webServer/tracing/traceFailedRequests – mhenry1384

+0

@JohnW điều này đã giúp cho một mức độ. Tôi đã có thể nhận được STATIC_COMPRESSION_NOT_SUCCESS thành STATIC_COMPRESSION_SUCCESS bằng cách thay đổi Ignore Hit Frequency trong applicationHost.config trực tiếp nhưng nó vẫn không trả về dữ liệu đã nén cho trình duyệt. Tôi đã có một thread riêng biệt ở đây: http: // stackoverflow.com/q/38250376/392591 – Jacques

3

bật tính năng nén tĩnh. nén động là cho các trang động như asp, php, aspx vv

Dưới đây là một liên kết đến IIS config reference for compression:

+0

Tôi không thấy nơi tôi sẽ cần phải làm điều đó cho IIS7. Tôi thấy nó trong IIS6, nhưng không 7. – Russ

+1

bạn có thể tìm thấy nó trong IIS Manager (inetmgr) trong phần IIS. mở mục "Nén" và chọn hộp kiểm "Bật nén nội dung tĩnh". –

+0

đã thêm liên kết vào tham chiếu cấu hình IIS. –

5

Trong phần system.webServer của file Web.config của bạn, thêm những dòng sau:

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

Các chương trình nén trong IIS7 được kích hoạt theo mặc định, nhưng nó bản đồ chỉ là một loại mime javascript duy nhất để được nén, ứng dụng/x-javascript. Thêm dòng trên cho IIS để cung cấp cho tất cả các tệp .js của bạn mà loại mime, do đó làm cho công việc nén.

+0

Tôi đã thử điều đó và không hoạt động: ( – vtortola

+0

Tôi thấy đó là cách ngược lại - máy chủ đang gửi JS dưới dạng 'application/x-javascript', nhưng đã nén' application/javascript' –

26

Chúng tôi đã có một vấn đề tương tự và nó chỉ ra rằng IIS7 hiện một số CPU động dựa throttling đây ..

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

dynamicCompressionDisableCpuUsage

thuộc tính uint bắt buộc.

Chỉ định phần trăm sử dụng CPU mà nén động sẽ bị tắt.

Lưu ý: Thuộc tính này hoạt động như giới hạn CPU trên mà tại đó nén động được tắt. Khi sử dụng CPU giảm xuống dưới giá trị được chỉ định trong thuộc tính dynamicCompressionEnableCpuUsage, tính năng nén động sẽ được bật lại.

Giá trị mặc định là 90.


dynamicCompressionEnableCpuUsage

Tùy chọn thuộc tính uint.

Chỉ định phần trăm sử dụng CPU bên dưới mà tính năng nén động sẽ được bật. Giá trị phải nằm trong khoảng từ 0 đến 100. Mức sử dụng CPU trung bình được tính cứ 30 giây một lần.

Lưu ý: Thuộc tính này hoạt động như giới hạn CPU thấp hơn dưới mức độ nén động được bật. Khi sử dụng CPU tăng lên trên giá trị được chỉ định trong thuộc tính dynamicCompressionDisableCpuUsage, nén động sẽ bị tắt.

Giá trị mặc định là 50.

Lưu ý giá trị mặc định - nếu IIS7 của bạn đạt 90% sử dụng CPU, nó sẽ vô hiệu hóa tất cả các nội dung động gzipped cho đến khi sử dụng CPU dips trở lại dưới 50%!

Ngoài ra, một số đề xuất và điểm chuẩn tuyệt vời ở đây về chi phí CPU thực của GZIP.

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

câu chuyện dài ngắn, trừ khi bạn thường xuyên có các trang động cũng vượt quá 200KB, đó là một vấn đề không.

5

Tôi đã giải quyết được sự cố của mình bằng cách cài đặt nén động tại chương trình Thêm/loại bỏ.

20

Tiếp theo những lời khuyên tuyệt vời của JohnW, tôi cũng bật ghi nhật ký để tìm ra thủ phạm, mặc dù lý do cho sự thất bại hóa ra là khác nhau:

STATIC_COMPRESSION_NOT_SUCCESS 
Reason 14 
Reason NOT_FREQUENTLY_HIT 

Nói tóm lại, có vẻ như nếu bạn không nhấn trang thường xuyên đủ sau đó IIS7 sẽ không coi nó xứng đáng với nén, mà có vẻ hơi lạ với tôi. Tuy nhiên, có ý nghĩa trong trường hợp này bởi vì tôi chỉ cố gắng thử nghiệm nó trên một máy tính địa phương.

Theo this page, mặc định dường như là trang phải được nhấn 2 lần trong vòng 10 giây để trở thành "lần truy cập thường xuyên". Nếu bạn thực sự muốn, bạn có thể ghi đè lên mặc định trong applicationHost.config (% systemroot% \ Windows \ System32 \ inetsrv \ config). Ít nhất đối với tôi nó là một thuộc tính bị khóa, vì vậy bạn sẽ không thể ghi đè nó trong web.config của riêng bạn.

<serverRuntime frequentHitThreshold="1" /> 

Ngoài ra, tôi lưu ý rằng SO đã có câu trả lời ở đây: In IIS7, gzipped files do not stay that way.

0

Đối với tôi nó bật ra được các thiết lập

noCompressionForProxies 

như chúng ta đang ở trên một proxy ở đây ... mất bản thân mình tắt proxy và thì đấy, nén.

Các vấn đề liên quan