
WordPress na IIS a WP Super Cache
Kategoria : IIS , Microsoft Serwer 2012R2




WordPress jako platforma jest bardzo elastyczna i umożliwia dostosowanie działania do wielu wymagań. Niestety ta cecha wiąże się z istotną wada – WordPress oparty jest o PHP, więc każda odsłona strony wiąże się z zasobożernym i długotrwałym procesem uruchamiania skryptów. W moim przypadku opóźnienie związane bezpośrednio z PHP wynosiło w zależności od obciążenia serwera pomiędzy sekundą a dwoma, więc pokusiłem się o próbę przyśpieszenia działania serwera. WP Super Cache było moim ostatecznym wyborem – produkuje statyczne strony HTML-owe, więc problem PHP jest skutecznie wyeliminowany.
Moje próby przyspieszenia działania serwera rozpocząłem od testów z wbudowaną funkcjonalnością IIS. Najlepsze efekty uzyskałem przy pomocy funkcji output-cache, dzięki której pliki i wyniki ich działania są przechowywane w pamięci RAM, minimalizując czas odpowiedzi serwera. Niestety, output-cache słabo współpracuje z stronami aktywnymi, opartym o WordPress/PHP. W wyniku tego administrator staje w obliczu kompromisu – wydajność serwera a opóźnienie w odświeżeniu treści strony www. Także czas reakcji systemu na działania użytkownika w przypadku tej metody jest bezpośrednio związany z ustawionym czasem odświeżenia pliku pamięci podręcznej – istnieje duże niebezpieczeństwo że użytkownik nie widząc swoich komentarzy lub postów wielokrotnie dodaje treść. To dlatego w moim przypadku po uwzględnieniu minusów tego rozwiązania, zdecydowałem się zainstalować wtyczkę WP Super Cache. I tutaj natknąłem się na problemy, bo w Internecie praktycznie brak materiałów na temat instalacji WP Super Cache na zestawie WordPress/IIS, a standardowa instalacja WP Super Cache jest przystosowana do Apache i po prostu nie działa.
O ile w przypadku Linuxa procedura instalacji WP Super Cache jest prosta, w przypadku Microsoft Server 2012 i IIS niełatwo jest znaleźć kompletny tutorial. Ta tematyka nie jest w bezpośrednim centrum moich zainteresowań ale ponieważ spędziłem trochę czasu na próbach pełnej instalacji postanowiłem się podzielić moimi doświadczeniami, z cichą nadzieją że uda mi się zaoszczędzić poszarpanej czupryny biednej duszy administratora IT. Podczas poniższych operacji nasza strona będzie niedostępna przez pewien czas, polecam więc ich wykonywanie w wybranym oknie małego ruchu.
Zaczynajmy:
- Robimy pełną kopię zapasową WordPress i serwera.
- Instalujemy na IIS moduł URL Rewrite 2.0 korzystając z instalatora Web Platform albo http://www.iis.net/downloads/microsoft/url-rewrite
- Instalujemy WP Super Cache (ale nie włączamy wtyczki).
- Sprawdzamy ustawienia linków bezpośrednich w WordPressie. Zestaw reguł przepisywania url jest dostosowany do ustawienia „Dzień i nazwa”.
Ewentualnie możemy użyć „Własnego formatu” i wpisać poniższy format:/%year%/%monthnum%/%day%/%postname%/
Gdy mamy ustawiony inny format możemy dostosować do niego reguły przepisywania adresów albo zmienić to ustawienie (drugi wybór może się wiązać z całkowitym odświeżeniem indeksu wyszukiwarek).
- Dodajemy reguły przepisywania adresów (używając URL Rewrite), przygotowując się do włączenia WP Super Cache.
- Plik web.config w katalogu głównym witryny – WP Super Cache będzie działało jako reverse-proxy
- Tworzymy nowy plik web.config w katalogu wp-content\cache i dodajemy poniższe reguły
<system.webServer> <rewrite> <rules> <rule name="WP super cache Windows WordPress" stopProcessing="true"><br /> <match url="(.*)" /><br /> <conditions logicalGrouping="MatchAll"><br /> <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /><br /> <add input="{QUERY_STRING}" pattern=".*=.*" negate="true" /><br /> <add input="{QUERY_STRING}" pattern=".*attachment_id=.*" negate="true" /><br /> <add input="{HTTP_COOKIE}" pattern="^.*(comment_author_|wordpress|wp-postpass_).*$" negate="true" /><br /> <add input="{DOCUMENT_ROOT}/wp-content/cache/supercache/{HTTP_HOST}/{R:1}index.html" matchType="IsFile" /><br /> </conditions><br /> <action type="Rewrite" url="wp-content/cache/supercache/{HTTP_HOST}/{R:1}index.html" /><br /> </rule> </rules> </rewrite> <system.webServer>
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="Cache-Control" value="max-age=3000, must-revalidate" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>
- Uruchamiamy WP Super Cache i testujemy czy działa poprawnie
- Odświeżamy stronę kilkakrotnie, korzystając z niezalogowanej sesji. Powinniśmy zauważyć zdecydowane przyśpieszenie działania strony, a katalog
\wordpress\wp-content\cache
zapełni się statycznymi plikami pamięci podręcznej.
That’s all folks!