Do niedawna korzystałem na prywatnych gratach z lighttpd jako serwera WWW. Lekki, fajny, składnia pliku konfiguracyjnego powiedzmy perlowa, działał. Niby wszystko OK, ale… Raczej nie jest wykorzystywany w różnych nowych projektach. Jeśli ktoś daje narzędzia czy instrukcje, to raczej można się nie spodziewać znalezienia wersji dla lighttpd.
W międzyczasie troche bliżej miałem okazję zetknąć się z nginx. Zrobił na mnie bardzo dobre wrażenie. Dla kilku vhostów bardziej przejrzysty konfig, nieźle wspierany w dokumentacji różnych projektów (apache to to nie jest, ale jest dobrze). Gwoździem do trumny dla lighttpd okazał się brak wsparcia dla HTTP/2, a nawet brak planów w tym zakresie. I łatwość włączenia obsługi HTTP/2 na nginx. Wystarczy jedna dyrektywa w pliku konfiguracyjnym (przy odpowiednio nowej wersji nginx – jest w backportach debianowych). Trochę na zasadzie „wykorzystać, nie wykorzystać, możliwość mieć można”.
Nic dziwnego, że pojawił się pomysł przesiadki na prywatnych gratach z lighttpd na nginx. Brakowało motywacji, bo po pierwsze istniejąca wersja działała, po drugie konfiguracja była lekko zakręcona, po trzecie brak czasu. Ostatecznie któregoś razu zebrałem się i wymyśliłem, że uruchomię oba serwery WWW równolegle. Na różnych portach i zrobię szybki benchmark lighttpd vs nginx. Który to benchmark oczywiście wykaże, że nginx jest szybszy i potwierdzi słuszność przesiadki[1]. 😉
Jak już się zebrałem, to okazało się, że w sumie nie ma aż tak wielu rzeczy skonfigurowanych. A z wielu, które są można czy wręcz wypadałoby zrezygnować. Głównym wyzwaniem okazało się skonfigurowanie nginx tak, żeby HTTP słuchało na niestandardowym porcie i jednocześnie przekierowywało na HTTPS, również na niestandardowym porcie. Znalazłem rozwiązanie, ale machnąłem ręką – dziwne, nieprzystające do normalnego konfiga, a przydatne tylko na moment, przy benchmarku. Za to przydać się może ładny gotowiec do przekierowań z wersji z www na bez www i odwrotnie.
Przy okazji instalacji SSL dowiedziałem się, że w końcu istnieje oficjalna paczka z klientem Certbot dla certyfikatów SSL od Let’s Encrypt w Jessie. Trzeba skorzystać z backportów. Plus, strona daje gotowe instrukcje instalacji dla popularnego oprogramowania (znowu: nginx jest, lighttpd nie ma). Czyli w certyfikatach też został zrobiony porządek. Dla pamięci: znalazłem stronkę z gotowcem, jak uzyskać A+ na popularnym teście SSL. Nieco przestarzała, ale nadal przydatna.
W zasadzie poszło zaskakująco dobrze, najwięcej niespodzianek wyszło na rzeczach najprostszych. A to serwer nie kompresował treści (tu jest o włączaniu kompresji), a to był problem z przetwarzaniem skryptów PHP. W końcu jest sensowna obsługa haseł na dostęp do stron (ew. miałem to wcześniej zrobione słabo).
Z rzeczy, które powinny działać, a nie działają – HTTP/2. Nie wiem, czy bardziej kwestia konfiguracji, wersji nginx, czy Firefoksa, ale wg testu HTTP/2 działało. Za to w Firefoksie (i na niektórych testach, zapewne korzystają z Firefoksa) strona się nie otwierała. Na innych przeglądarkach działało OK, ale do czasu rozwiązania problemu wyłączam HTTP/2. Tak czy inaczej w starciu lighttpd vs nginx wygrał u mnie ten ostatni.
Ponieważ wygląda, że publiczne motywatory działają: następna w kolejce jest przesiadka z chronicle na pelican na Wattmeter. Robi dobre wrażenie i jest w Pythonie. 😉
[1] Na przykładzie strony nextbike.tk i prostego testu przy pomocy ab -n 2000 -c 20 okazało się jednak, że różnicy większej niż błąd pomiaru nie ma. Być może kwestia wielkości małej wielkości pliku i narzutu na transmisję. Abo może może kwestia obciążenia serwera. Konfigi serwerów też nie były ani identyczne, ani optymalizowane. W każdym razie dla mnie szybciej nie będzie.
O! Pelican generuje poprawne źródło Atom/RSS i są gotowe skrypty dla Disqus. 🙂
Co do http/2 to polecam spróbować takie metody szyfrowania, gdyż z tego co kojarzę to zarówno sama lista jak i kolejność elementów miała znaczenie przy http/2, poniższa lista też potrafi wyciągnąć A+ w teście.
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
@Sebastian Poprawny RSS to skutek uboczny, raczej. Disqus – do tego wystarczył JS z tego co pamiętam, więc kwestia modyfikacji template’u, by działało gdziekolwiek, ale dzięki, nie: rozie.blox.pl/2014/05/Bez-Disqusji.html
@tomasz Hm! Dzięki za trop, możliwe, że o metody szyfrowania właśnie chodzi. Bo przecież miałem działające HTTP/2 na nginx i na Firefox działało…
Config nginxa w porównaniu z lighttpd wydaje mi się taki nieelegancki. Przesiadka jeszcze przede mną, został właśnie jedyny prywatny serwer, za to z mnóstwem usług.
Szkoda że lighttpd się skończył.
@GDR! Mi się podoba, podobny jak w apache, podział na vhosty, czy też – bardziej – jego możliwość. W lighttpd miałem wszystko w jednym pliku (AFAIK nie da się inaczej?) i był chaos.