Drupal pod kontrolą Lighttpd - opis konfiguracji.


Moduł magnet do poprawnego działania wymaga aby Lighttpd było skompilowane z opcją --with=lua, wymagane jest posiadanie lua w wersji 5.1 lub wyższej. Aby sprawdzić czy posiadasz obsługę lua uruchom lighttpd z parametrem -V:

  1. # lighttpd -V
  2. (...)
  3.         + LUA support
  4. (...)

Mając odpowiednio przygotowane środowisko przystępujemy do konfiguracji. Podobnie jak w przypadku mod_rewrite dodajemy do sekcji server.modules obsługę mod_magnet:

  1. server.modules = ( ..., "mod_rewrite", "mod_magnet" ... )

Moduł magnet dodaje do Lighttpd zaawansowaną obsługę zapytań. Pozwala na zaawansowaną manipulacje URLem - jest idealnym uzupełnieniem dla mod_rewrite.
Skrypy w lua napisał darix, jest dostępny na jego stronie oraz tutaj:

  1. -- little helper function
  2. function file_exists(path)
  3.   local attr = lighty.stat(path)
  4.   if (attr) then
  5.       return true
  6.   else
  7.       return false
  8.   end
  9. end
  10. function removePrefix(str, prefix)
  11.   return str:sub(1,#prefix+1) == prefix.."/" and str:sub(#prefix+2)
  12. end
  13.  
  14. -- prefix without the trailing slash
  15. local prefix = ''
  16.  
  17. -- the magic ;)
  18. if (not file_exists(lighty.env["physical.path"])) then
  19.     -- file still missing. pass it to the fastcgi backend
  20.     request_uri = removePrefix(lighty.env["uri.path"], prefix)
  21.     if request_uri then
  22.       lighty.env["uri.path"]          = prefix .. "/index.php"
  23.       local uriquery = lighty.env["uri.query"] or ""
  24.       lighty.env["uri.query"] = uriquery .. (uriquery ~= "" and "&" or "") .. "q=" .. request_uri
  25.       lighty.env["physical.rel-path"] = lighty.env["uri.path"]
  26.       lighty.env["request.orig-uri"]  = lighty.env["request.uri"]
  27.       lighty.env["physical.path"]     = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
  28.     end
  29. end
  30. -- fallthrough will put it back into the lighty request loop
  31. -- that means we get the 304 handling for free. ;)

Jedna bardzo ważna kwestia. Jeżeli Twoja strona znajduje się w katalogu domeny np. www.kompy.net/drupal/, to należy ustawić wartość zmiennej prefix (linia 15) na '/drupal', bez zakończenia slashem!

Teraz wystarczy tylko dodać obsługę modułu magnet w konfiguracji hosta (podobnie jak z regułkami mod_rewrite):

  1.    $HTTP["url"] =~ "^/files/imagecache/" {
  2.              magnet.attract-physical-path-to = ( "/usr/local/etc/lighttpd/drupal.lua" )
  3.    }

Uzupełniając poprawną ścieżką do pliku ze skryptem.

Teraz możemy cieszyć się w pełni funkcjonalnością Drupala na lekkim serwerze jakim niewątpliwie jest Lighttpd!