Przenoszenie strony WWW z Nginx jako proxy

Avatar photo
  • Konrad Kowalski
  • 19/01/2015
  • Nginx
  • 2 komentarze
Nginx

Procedura przenoszenia strony WWW na inny serwer z pozoru wydaję się być prostą operacją. Pierwszym etapem jest przesłanie plików strony na nowy serwer (np. poprzez rsync), zrobienie kopii zapasowej baz danych i wgranie ich na nowej maszynie, konfiguracja nowego serwera www oraz zmiana wpisów DNS.

Cały proces migracji można by zakończyć w bardzo krótkim czasie gdyby nie czas propagacji nowych wpisów DNS w sieci Internet (do 24 godzin). W tym czasie domena w niektórych miejscach może wskazywać jeszcze na stary serwer, w innych już na nowy. Przez co użytkownicy z nieaktualnymi wpisami DNS mogą trafić na starą wersję strony umieszczoną na starym serwerze.

Pierwszym błędem jaki można popełnić jest wyłączenie strony na starym serwerze. W tym momencie nasi użytkownicy zostaną pozbawieni dostępu do niej. Dlatego też warto rozważyć pozostawienie uruchomionych równocześnie dwóch kopii strony. Pozostawienie działającej strony na dotychczasowym serwerze oraz jednoczesne uruchomienie nowej kopii na docelowej maszynie. Rozwiązanie nie jest pozbawione wad. Sprawdza się tylko i wyłącznie w przypadku stron statycznych, rzadko aktualizowanych. W przypadku stron dynamicznych jak np. blogów opartych na WordPressie takie postępowanie może doprowadzić do utraty części danych (np. utrata komentarzy dodanych na starym serwerze w czasie migracji). W przypadku dodawania nowych wpisów w czasie propagacji DNS część użytkowników może ich nie zobaczyć. Moim zdaniem jednoczesne dodawanie wpisów w dwóch wersjach serwisu mija się z celem.

Najlepszym rozwiązaniem jest skonfigurowanie serwera WWW jako proxy, które umożliwi obsługę zapytań użytkowników trafiających na dotychczasowy serwer. Dzięki użyciu trybu proxy użytkownicy nie zostaną pozbawieni dostępu do aktualnej wersji strony zlokalizowanej na nowym serwerze. Serwer WWW (w tym przpadku Nginx) będzie przekazywał ich zapytania do nowego serwera, pobierał aktualną treść a następnie serwował je użytkownikom.

Aby ustawić proxy dla strony www w pliku konfiguracyjnym Nginx, na dotychczasowym serwerze, odnajdujemy wpisy dotyczące przenoszonego serwisu, a następnie zastępujemy je następującymi dyrektywami:

server {
        server_name naszPrznoszonySerwis.domena.tld;
        listen         80;

         location / {
                proxy_pass http://IPSERWERA;
                proxy_redirect          off;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
         }
}

W przypadku ostatniej migracji mojego bloga blog.kowalsio.com przenoszonego na serwer z IP 78.47.45.196 wpis wyglądał następująco:

server {
        server_name blog.kowalsio.com;
        listen         80;

         location / {
                proxy_pass http://78.47.45.196;
                proxy_redirect          off;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
         }
}

Warto przeczytać

2 komentarze

Możesz dodawać komentarze do tego artykułu.


  • 1. Odpowiednio wcześniejsze zmniejszenie TTL z doby do np. 10 minut znacznie ogranicza problemy z propagacją wpisów DNS.
    2. Przekierowanie ruchu można zrobić w niższej warstwie, bez angażowania softu serwera WWW – po prostu przerzucić ruch ze starego serwera na nowy (redir, iptables).

    rozie 9 lat ago Reply


    • Avatar photo

      Całkiem ciekawe rozwiązania 🙂 Dzięki za merytoryczny komentarz.

      Konrad Kowalski 9 lat ago Reply


Dodaj komentarz