Piotr Szczepanik – programowanie (.Net, C#, SQL), administracja, IT

blog IT: programowanie, administracja
Nie będę opisywał ani sensu stosowania, ani zalet / wad mechanizmu kompresji HTTP. Opiszę jedynie sposób na implementację tego rozwiązania na serwerze IIS 6.

1. Włączanie kompresji dla witryn w IIS

Przechodzimy do „Menedżera internetowych usług informacyjnych (IIS)„. Klikamy prawym klawiszem na „Witryny sieci Web” i wybieramy polecenie „Właściwości„. Klikamy na zakładkę „Usługa„.

W sekcji „Kompresja protokołu HTTP” zaznaczamy pola:

- Kompresuj pliki aplikacji,

- Kompresuj pliki statyczne.

Możemy dodatkowo ograniczyć maksymalny rozmiar katalogu tymczasowego do wybranej przez nas wartości. W przypadku gdy włączymy tą opcję, a rozmiar katalogu osiągnie podaną wartość starsze pliki tymczasowe będą zastępowane nowymi.

2. Dodawanie rozszerzenia usługi Web

Przechodzimy do „Menedżera internetowych usług informacyjnych (IIS)„. Klikamy prawym klawiszem na „Rozszerzenia usługi sieci Web” i wybieramy polecenie „Dodaj nowe rozszerzenie usługi sieci Web„.

Podajemy nazwę rozszenia, np. HTTP Compression.

Klikamy na przycisk „Dodaj” i wskazujemy plik: C:\WINDOWS\system32\inetsrv\gzip.dll

Uwaga: ścieżka do pliku gzip.dll może ulec zmianie w zależności od systemu.

Zaznaczamy „Ustaw stan rozszerzenia na ‘dozwolone’” i klikamy na „OK„.

3. Konfigurowanie rozszerzeń podlegających kompresji

Przechodzimy do katalogu c:\Windows\System32\inetsrv .

Na wszelki wypadek wykonujemy kopię pliku MetaBase.xml, a następnie otwieramy oryginalny plik do edycji.

Odnajdujemy sekcję „IIsCompressionScheme” dotyczacą kompresji gzip, czyli sekcję z atrybutem „Location” ustawionym na wartość „/LM/W3SVC/Filters/Compression/gzip„.

Odnajdziemy sekcję podobną do poniższej:

 XML |  kopiuj kod |? 
01
<IIsCompressionScheme 
02
Location ="/LM/W3SVC/Filters/Compression/gzip"
03
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
04
HcCreateFlags="1"
05
HcDoDynamicCompression="TRUE"
06
HcDoOnDemandCompression="TRUE"
07
HcDoStaticCompression="TRUE"
08
HcDynamicCompressionLevel="0"
09
HcFileExtensions="htm
10
html
11
txt"
12
HcOnDemandCompLevel="10"
13
HcPriority="1"
14
HcScriptFileExtensions="asp
15
dll
16
exe"
17
>
18
</IIsCompressionScheme>

W atrybucie "HcScriptFileExtensions" konfigurujemy pliki o jakim rozszeżeniu mają podlegać kompresji HTTP.

Zapisujemy zmodyfikowany plik i od tej pory możemy cieszyć się dobrodziejstwami kompresji HTTP.
„One or more users currently use this mailbox store. These users must be moved to a different mailbox store or be mail disabled before deleting this store.”

Jeżeli podczas próby odinstalwoania serwera Exchange z systemu Windows 2003 Server jesteśmy raczeni powyższym komunikatem znaczy to, iż musimy pousuwać atrybuty serwera Exchange z kont użytkowników w AD.

Jak to zrobić? Przechodzimy do przystawki MMC Active Directory Users & Computers. Klikamy prawym klawiszem na wybranym użytkowniku i wybieramy „Exchange Tasks„. Z dostepnych opcji wybieramy „Remove Exchange Attributes„.

Wyszukiwanie użytkowników z atrybutami serwera Exchange

Jeżeli nie wiemy, którzy użytkownicy posiadają atrybuty serwera Exchange możemy ich łatwo odszukać kożystając z funkcji wyszukiwania obiektów w AD.

Przechodzimy do przystawki Active Directory Users & Computers, klikamy prawym klawiszem na najwyższym elemencie drzewka i wybieramy opcje „Find„. Przechodzimy do zakładki „Advanced„. Klikamy na przycisku „Field„, a nastepnie wybieramy User > Exchange Home Server. W pole „Value” wpisujemy nazwę serwera Exchange. Klikamy na przycisku „Add„. Teraz możemy wyszukać wszystkich użytkowników, do których przypisane są trybuty serwera Exchange.
Czy zdarzały Ci się utraty zawartości sesji (w trybie InProc) w swojej aplikacji ASP.Net ?

Jedną z przyczyn takich zdarzeń może być fakt restartu aplikacji webowej.

Możliwe przyczyny restartu aplikacji:

  • modyfikacja któregoś z plików: machine.config, web.config, global.asax; w niektórych przypadkach programy antywirusowe mogą powodować, iż pomimo braku modyfikacji zawartości tych plików serwer dokona restartu aplikacji,
  • modyfikacja plików w katalogu bin aplikacji,
  • pliki ASP.Net (np. aspx, asmx) zostały zmodyfikowane, a w rezultacie przekompilowane więcej razy niż wskazuje sekcja compile -> numRecompilesBeforeApprestart pliku machine.config; domyślnie wartość ta jest dosyć niska, dlatego w przypadku gdy często dokonujemy aktualizacji naszych plików aplikacji na serwerze zaleca się jej zwiększenie,
  • wewnątrz katalogu aplikacji został utworzony / skasowany / lub została zmieniona nazwa innego katalogu,
  • pula aplikacji (AppPool) w IIS jest skonfigurowana tak, aby odświeżanie aplikacji (app recycle) wykonywane było zbyt często; aby zmodyfikować wartości odświeżania należy przejść do menadżer internetowych usług informacyjnych > pule aplikacji > [pula naszej aplikacji]  > prawy klawisz myszki - Właściwości : zakładka Odświeżanie.
W przypadku używania trybu InProc do przechowywania stanu sesji, gdy w IIS używamy (Ogrodu sieci Web garden) mogą nastąpić utraty stanu sesji bez restartu aplikacji. W takim przypadku musimy sprawdzić czy wartość Maksymalna liczba procesów roboczych dla puli naszej aplikacji nie jest ustawiona na liczbę większą od 1.

Aby przejść do konfiguracji Ogrodu sieci: menadżer internetowych usług informacyjnych > pule aplikacji > [pula naszej aplikacji]  > prawy klawisz myszki - Właściwości : zakładka Wydajność, sekcja Ogród sieci Web.
Połączenie serwera WWW (z włączoną kompresja HTTP) z przeglądarką internetową (obsługującą kompresję) znacznie zmniejszy ilość danych koniecznych do przetransportowania między serwerem, a klientem w celu wyświetlenia strony końcowej. O zaletach i wadach tego rozwiązania nie będę się rozwodził.

Poniżej przedstawię instrukcję krok-po-kroku jak uruchomić kompresję HTTP na serwerze WWW opartym o IIS 6.

1. Przechodzimy do „Menedżer internetowych usług informacyjnych (IIS)„.

2. Klikamy prawym klawiszem na „Witryny sieci Web” i wybieramy „Właściwości„.

3. Przechodzimy na zakładkę „Usługa” i zaznaczamy pola „Kompresuj pliki aplikacji” oraz „Kompresuj pliki statyczne„. Zatwierdzamy zmiany poprzez kliknięcie na OK.

4. Klikamy prawym klawiszem na „Rozszerzenia usługi sieci Web” i wybieramy „Dodaj nowe rozszerzenie usługi sieci Web„.

5. W pole „Nazwa rozszerzenia” wpisujemy „HTTP Compression„, klikamy na przycisk „Dodaj” i wskazujemy plik „gzip.dll” (w standardowej instalacji serwera znajduje on się pod ścieżką „c:\WINDOWS\system32\inetsrv\gzip.dll„). Zaznaczamy pole „Ustaw stan rozszerzenia na dozwolone” i zatwierdzamy konfigurację przyciskiem OK.

6. Ponownie uruchamiamy serwer IIS (np. poprzez komendę wiersza poleceń „iisreset„.

Od teraz mamy uruchomioną kompresję HTTP na naszym serwerze WWW.

Standardowo IIS poddaje kompresji następujące typy plików: htm, html, txt, asp, dll, exe. Możemy dostosować te ustawiania poprzez modyfikację pliku „c:\Windows\System32\inetsrv\MetaBase.xml„. Konfiguracja typów pliku dla kompresji gzip znajduje się w sekcji IISCompressionScheme dla lokalizacji „/LM/W3SVC/Filters/Compression/gzip„.

Uwaga. Przed zapisem zmian w pliku MetaBase.xml należy zatrzymać serwer IIS. W przeciwnym wypadku zapis nie będzie możliwy.

Teraz pozostaje nam już tylko sprawdzić działanie kompresji za pomocą jednego z darmowych testerów dostępnych w sieci, np: