Etykiety

wtorek, 31 stycznia 2017

Jak ustawić przerwę techniczną witryny www

Podczas gdy możliwość ustawienia przerwy technicznej przeważnie nie ma większego sensu dla prostych serwisów web, to w przypadku bardziej złożonych witryn bywają sytuacje, w których warto tymczasowo całkowicie uniemożliwić dostęp użytkowników do treści stron. Są to przeważnie okoliczności związane z modyfikacją skryptów odpowiedzialnych za wyświetlanie treści lub z ingerencją w strukturę baz danych związanych z serwisem. Żaden webmaster raczej by nie chciał by osoby wówczas odwiedzające serwis napotykały się na wyświetlane błędy lub nieprawidłowe treści związane z wprowadzaniem modyfikacji lub z testowaniem nowych funkcjonalności serwisu.

Pomimo iż istnieje zgodny z dobrymi praktykami sposób na ustawienie przerwy technicznej serwisu www, to w praktyce webmasterzy posługują się w tym celu różnymi metodami mniej lub bardzie eleganckimi i mniej lub bardziej technicznie odpowiednimi. Niektóre z tych metod mogą bardzo negatywnie wpłynąć, nie tylko na reputację serwisu wśród odwiedzających, ale także na pozycję stron w wyszukiwarkach.

A może tak mała przerwa techniczna?
A może tak mała przerwa techniczna?

W przypadku konieczności ustawienia tymczasowej przerwy technicznej zdecydowanie odradzam wyłączać lub ograniczać funkcjonalność serwera www, ograniczać dostęp do serwisu za pomocą chronionych katalogów, reguł firewalla, bądź bezpośrednio wysyłając nagłówki z poziomu skryptów php za pomocą funkcji header(). Tego typu praktyki nie są przeważnie idealne dla przerwy technicznej, a mogą wręcz być przyczyną wielu negatywnych sytuacji.

W tym tutorialu przedstawię prosty i prawidłowy sposób ustawienia przerwy technicznej dla serwisu web obsługiwanym przez serwer Apache 2.x. Jest to sposób w pełni zgodny z dobrymi praktykami webmasterskimi.

W celu ustawienia przerwy technicznej w serwisie www w sposób omawiany w niniejszym artykule, muszą zostać spełnione następujące, wstępne warunki:

Moduł Apache mod_rewrite


Moduł Apache mod_rewrite (rewrite_module) umożliwia przekierowywania url, które w przypadku przerwy technicznej powinny kierować użytkownika na adres url, pod którym znajduje się dokument web informujący o tymczasowej sytuacji, w przypadku żądań HTTP dotyczących każdego innego adresu url, znajdującego się na domenie serwisu. Przed przejściem do dalszej części tego artykułu należy się upewnić, że moduł ten jest uruchomiony i działa prawidłowo. Można tego dokonać na kilka różnych sposobów. Najprostszym z nich może być, jeśli mamy dostęp do konsoli:

apachectl -M | grep rewrite_module

Innym prostym sposobem jest wywołanie polecenia php phpinfo() i sprawdzenie statusu modułu mod_rewrite w wyświetlanych wynikach skryptu.

Aby załadować moduł Apache mod_rewrite, jeśli nie jest jeszcze załadowany, należy dodać poniżej przedstawiony wiersz do pliku httpd.conf, lub do pliku /etc/httpd/conf.modules.d/, w zależności od dystrybucji systemu, po czym należy uruchomić ponownie serwer Apache:

LoadModule rewrite_module modules/mod_rewrite.so

Plik .htaccess


Plik .htaccess jest miejscem, w którym można ustawić wiele istotnych parametrów serwera www, które mają obowiązywać dla danego katalogu i ewentualnie jego podkatalogów, pod warunkiem, iż nie zawierają one kolejnych plików .htaccess z innymi ustawieniami, jeśli przetwarzanie plików .htaccess dla tych podkatalogów jest włączone. Aby ustawienia znajdujące się w tym pliku miały efekt, musi właśnie zostać włączona ich obsługa dla danego katalogu. Ustawień tych dokonujemy w głównym pliku konfiguracyjnym serwera Apache, czyli httpd.conf. Aby włączyć obsługę pliku .htaccess dla danego katalogu serwisu www, należy w sekcji <Directory> związanej z tym katalogiem dodać następujący wpis, jeśli jeszcze nie jest on tam obecny:

AllowOverride All

Przerwa techniczna: strona informująca o przerwie


Aby przekierowanie do dokumentu informującego o tymczasowej przerwie technicznej przyniosło efekt należy stworzyć dokument web z właściwą dla tej okoliczności informacją. Dla zgodności z niniejszym tutorialem, plik może mieć przykładową nazwę przerwaTechniczna.html i może znajdować się w głównym katalogu www serwera Apache, czyli lokalizacji określonej jako DocumentRoot w pliku konfiguracyjnym httpd.conf.

Przerwa techniczna: ustawienia .htaccess


Zakładając, że moduł mod_rewrite, o którym pisałem wcześniej, działa prawidłowo, a obsługa plików .htaccess jest włączona dla katalogów związanych z naszym serwisem, możemy teraz przystąpić do wprowadzenia odpowiednich, przykładowych wierszy „przerwy technicznej" do pliku .htaccess związanego z naszą witryną:

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/przerwa-techniczna -f RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.1 RewriteCond %{REQUEST_URI} !przerwaTechniczna.html$ [NC] RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC] RewriteRule .* /przerwaTechniczna.html [R=302,L] </IfModule>

Świetnie! Ale, co to wszystko oznacza?

W sekcji rozpoczynającej się od <IfModule mod_rewrite.c>, a kończącej na &lt/IfModule&gt znajdują się dyrektywy serwera Apache, które są przetwarzane tylko w przypadku prawidłowo działającego modułu mod_rewrite, w celu uniknięcia błędów. Dyrektywa 'RewriteEngine on' włącza przekierowania url, a kolejne wiersze ustawień przekierowują użytkownika do dokumentu informującego o przerwie technicznej w przypadku żądań HTTP dotyczących każdego innego adresu url witryny. Warunkiem przekierowań jest obecność pliku o przykładowej nazwie przerwa-techniczna w głównym katalogu www, określonego jako 'DocumentRoot' w pliku httpd.conf. Przekierowanie jednak nie następuje w przypadku wywołania plików zawierających grafikę, bądź wywołania adresu url dokumentu informującego o przerwie (aby uniknąć nieskończonej pętli przekierowań). Dodatkowo, użytkownicy, którzy łączą się z witryną z adresu 192.168.0.1 (tutaj adres klasy 'C' - dla przykładu - ten adres można oczywiście dowolnie zmienić) nie zostają przekierowani do dokumentu informującego o przerwie technicznej, co oznacza, że mają pełen dostęp do treści serwisu. Dostęp do serwisu w trakcie przerwy technicznej może okazać się przydatny np. webmasterom.

Warto również zauważyć, że przekierowanie następuje z kodem HTTP Error 302 (moved temporarily), co stanowi cenną informację dla robotów indeksujących zawartość witryny. W przypadku prawidłowo ustawionej przerwy technicznej, klient żądający dostępu do przekierowywanych adresów uri, otrzymuje następującą, przykładową odpowiedź HTTP:

HTTP/1.1 302 FoundLocation: http://naszadomena/przerwaTechniczna.html

Ustawienia wstępne gotowe. Czas włączyć przerwę techniczną!


Po dokonanych ustawieniach wstępnych, aby włączyć przerwę techniczną, należy utworzyć plik, o przykładowej nazwie, zgodnej z nazwą obecną w regułach przekierowań w pliku .htaccess, która w naszym przykładzie brzmi 'przerwa-techniczna'. Dopóki plik ten będzie istniał we wskazanym katalogu, obowiązywała będzie przerwa techniczna, co oznacza, że odwiedzający będą przekierowywani do dokumentu web o niej informującym.

Podobnie, aby zakończyć przerwę techniczną i przywrócić pełną dostępność serwisu, wystarczy usunąć plik 'przerwa-techniczna' z katalogu.

Oczywiście nie ma sensu każdorazowo tworzyć i usuwać tego pliku ręcznie, gdyż można w tym celu przygotować bardzo prosty skrypt php, składający się z zaledwie kilku wierszy, który będzie wykonywał tą czynność za nas.

Powodzenia! W przypadku uwag lub wątpliwości bardzo proszę o komentarze. Będę starał się na nie odpowiadać tak szybko, jak tylko będzie to możliwe.

Brak komentarzy:

Prześlij komentarz

Dodaj komentarz