Zauważyłem, że serwer na którym stoi moja strona chodzi wolno, przez co według Google „Wczytanie strony w Twojej witrynie trwa średnio 10,3 s (aktualizacja: 14-03-2010). Trwa to dłużej niż w przypadku 93% witryn”.

Zmiana na lepsze…
W końcu podjąłem męską decyzję – zmieniam maszynę na ciut wydajniejszą i mniej obciążoną. Szybka instalacja VPS (nie lubię mieć dziwnych rzeczy uruchomionych w głównym systemie – wszystko mam w obrębie różnych wirtualnych serwerów), i staję przed dylematem – jaki serwer WWW? Wcześniej używałem LiteSpeed – fajny, lekki ale w wersji darmowej działa tylko na jednym rdzeniu (a na nowym mam cztery rdzenie, na starym dwa). Apache jest powolny (co prawda mocno rozbudowany, dający duże możliwości konfiguracyjne) – jednak nie dla mnie. Do wyboru pozostały dwie opcje Lighttpd oraz nginx. Lighttpd jest lepszym rozwiązaniem jeżeli mamy bardzo rozbudowane regułki mod_rewrite (Nginx nie obsługuje plików .htaccess), jednak jest „ciut” wolniejszy.
Przenosiny
Wybrałem nginx, szybko i prosto go zainstalowałem, skonfigurowałem, pobawiłem się opcjami i… czas przenieść stronę. Można to zrobić na szybko – przenieść dane i zmienić wpisy w DNS – jednak… Czas propagacji zmiany domeny może sięgnąć nawet 72godziny – przez ten czas niektóre osoby mogą widzieć starą stronę. Nie chcę/nie mogę pozwolić sobie na taką sytuację. Już myślałem jak rozwiązać ten problem – redirect, forwardowanie pakietów itd…
Dlaczego nginx jest (naj)lepszy?
Próbując wymyślić większe koło, przypomniałem sobie jeden z powodów dlaczego nginx jest lepszy od (znanych mi) serwerów WWW. Może być proxy dla dowolnie innego serwera WWW – w moim wypadku Litespeed.
Wystarczy zmienić adres IP w DNS, serwis (pliki, baza) zostaje narazie na starym serwerze i.. nikt nawet nie odczuje problemu. Osoby które będą miały „nieświeże” IP – dostaną content ze starego serwera, osoby ze „świeżym” mają content ze… starego serwera :)
W ten sposób ciacho.pl zyskało nowy serwer WWW:
Takie rozwiązanie już poprawiło (w moim odczuciu) prędkość ładowania się strony, jednak… czegoś mi brakowało. Skrypty php dostawały jako adres IP gościa, adres użyty w serwerze proxy. Niby nic, jednak nie podobało mi się to rozwiązanie…. Z pomocą przyszedł drugi nginx, odpalony obok Litespeed (na innym porcie) z obsługą FastCGI – który ze zmiennej $http_x_real_ip przenosi adres IP do $REMOTE_ADDR. Konfiguracja jest prosta:
Na serwerze proxy – ustawiamy prawdziwy adres IP gościa jako X-Real-IP:
1 2 3 4 5 6 7 | location / { proxy_pass http://172.20.10.15:83/; proxy_redirect off; proxy_set_header Host ciacho.pl; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } |
Na hoście docelowym, ze zmiennek X-Real-IP przekazujemy do REMOTE_ADDR:
1 2 3 4 5 6 7 8 | location ~ \.php$ { fastcgi_pass 127.0.0.1:9002; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; fastcgi_intercept_errors on; include /etc/nginx/fastcgi_params; fastcgi_param REMOTE_ADDR $http_x_real_ip; } |
A co z Rewrite?
Nginx obsługuje rewrite, nawet ma większe opcje niż Apache (nie wiem jak jest w Lighttpd – nie używałem go), i według mnie jest łatwiejszy do konfiguracji.
Dla przykładu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <ifmodule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^ciacho.pl RewriteRule ^(.*)$ http://ciacho.pl/$1 [R=permanent,L] </ifmodule> # BEGIN Szeryf <ifmodule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^XXXX/(.*)$ /1dcd5466f51dfb897dce/$1 [L] </ifmodule> # END Szeryf <ifmodule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^/feed/$ http://feeds.feedburner.com/ciacho [R,L] </ifmodule> <ifmodule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner RewriteRule ^index\.xml$ http://feeds.feedburner.com/ciacho [R,L] </ifmodule> # BEGIN WordPress <ifmodule mod_rewrite.c> RewriteEngine On RewriteBase / # STEALTH-LOGIN RewriteRule ^wykrzycz /wp-login.php?action=logout&_wpnonce=XXXXX8&stealth_out_key=XXXX [L] RewriteRule ^zakrzycz /wp-login.php?stealth_in_key=XXX&redirect_to=http://ciacho.pl/wpc/wp-admin/ [R,L] RewriteRule ^krzykacz /wp-admin/?stealth_admin_key=XXXX [R,L] RewriteCond %{HTTP_REFERER} !^http://ciacho.pl/wp-admin RewriteCond %{HTTP_REFERER} !^http://ciacho.pl/wp-login\.php RewriteCond %{HTTP_REFERER} !^http://ciacho.pl/login RewriteCond %{HTTP_REFERER} !^http://ciacho.pl/admin RewriteCond %{QUERY_STRING} !^stealth_in_key=XXXX RewriteCond %{QUERY_STRING} !^stealth_out_key=XXXX RewriteCond %{QUERY_STRING} !^stealth_reg_key=XXXX RewriteCond %{QUERY_STRING} !^stealth_admin_key=XXXX RewriteRule ^wp-login\.php http://ciacho.pl/wpc [L] RewriteCond %{QUERY_STRING} ^loggedout=true RewriteRule ^wp-login\.php http://ciacho.pl/wpc [L] # END STEALTH-LOGIN RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </ifmodule> |
Rewrite dla nginx wygląda następująco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | location / { if (-e $request_filename) { break; } rewrite ^/4280067ece3c58a92766/(.*)$ //1dcd5466f51dfb897dce/$1 last; if ( $http_user_agent !~ FeedBurner ) { rewrite ^/index\.xml$ http://feeds.feedburner.com/ciacho last; rewrite ^/feed http://feeds.feedburner.com/ciacho last; rewrite ^/comments/feed/(.*)$ /http://feeds.feedburner.com/ciacho-komentarze last; } rewrite ^/wykrzycz /wp-login.php?action=logout&_wpnonce=XXXXX8&stealth_out_key=XXXX last; rewrite ^/zakrzycz /wp-login.php?stealth_in_key=XXX&redirect_to=http://ciacho.pl/wpc/wp-admin/ permanent; rewrite ^/krzykacz /wp-admin/?stealth_admin_key=XXXX permanent; rewrite ^(.+)$ /index.php?q=$1 last; } |
Powyższe ustawienie działają dla pluginu stealth login.
Pogrzebałem sobie i co dalej
Teraz pozostaje mi poczekać – za tydzień przeniosę fizycznie pliki ze starego serwera na nowy. Przez ten czas spróbuję się pobawić opcjami proxy, i oczywiście czekam na nowy „raport” z Google – jak bardzo powolna jest moja strona ;)




Witam, chciałem zapytać z jakiego hostingu korzystasz ?
W tej chwili z własnego – gdzieś kątem wrzucona maszynka.
[...] reklama Ciacho przed chwilą Zmiana serwera www z #litespeed na #nginx proxy i nginx jako content. ciacho.pl/…x-litespeed-nginx-fajna-z… [...]