Jump to Navigation

Lighttpd - Trazendo leveza ao Drupal

Hoje fui convidado pelo Fabiano (wundo) a controlar um apache compulsivo por memória.

Nunca conseguir descobrir o porquê, mas algumas vezes o apache 2 mpm prefork ( que funciona como o apache 1, sem threads )  começa a devorar memória.

Especialmente se usado com mod_php5 e drupal.

Mas antes de perder tempo demais com diagnóstico e solução do problema no apache, o FF apostou no Lighttpd. Ele funciona muito bem com php - presumivelmente, melhor que o Apache - e é assustadoramente leve e rápido.

Portanto, vou compartilhar aqui os passos principais para se usar o Lighttpd com Drupal, e economizar memória e processador.

O passo-a-passo serve para distros baseadas em debian

  1. Instalando o básico
    sudo apt-get install lighttpd lighttpd-mod-magnet php5-cgi
    
  2. Habilitando os módulos essenciais:
    cd /etc/lighttpd
    sudo ln -s $PWD/conf-available/10-fastcgi.conf conf-enabled/
    sudo ln -s $PWD/conf-available/10-magnet.conf conf-enabled/
  3. Habilitando as URLs amigáveis:
    • Crie o seguinte arquivo: /etc/lighttpd/drupal.lua
    • Com o seguinte conteúdo:

      -- little helper function
      function file_exists(path)
        local attr = lighty.stat(path)
        if (attr) then
            return true
        else
            return false
        end
      end
      function removePrefix(str, prefix)
        return str:sub(1,#prefix+1) == prefix.."/" andstr:sub(#prefix+2)
      end

      -- prefix without the trailing slash
      local prefix = ''

      -- the magic ;)
      if (not file_exists(lighty.env["physical.path"])) then
          -- file still missing. pass it to the fastcgi backend
          request_uri = removePrefix(lighty.env["uri.path"], prefix)
          if request_uri then
            lighty.env["uri.path"]          = prefix .."/index.php"
            local uriquery = lighty.env["uri.query"] or ""
            lighty.env["uri.query"] = uriquery .. (uriquery ~= ""and "&" or "") .. "q=" .. request_uri
            lighty.env["physical.rel-path"] =lighty.env["uri.path"]
            lighty.env["request.orig-uri"]  =lighty.env["request.uri"]
            lighty.env["physical.path"]     =lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
          end
      end
      -- fallthrough will put it back into the lighty request loop
      -- that means we get the 304 handling for free. ;)


    • Adicione a seguinte linha ao arquivo /etc/lighttpd/lighttpd.conf :
      # for clean urls
      magnet.attract-physical-path-to = ( "/etc/lighttpd/drupal.lua" )
      
  4. Permita o php alocar mais memória para script quando necessário, editando o arquivo /etc/php5/cgi/php.ini.
    Mude a diretiva memory_limit = 16M
    para: memory_limit = 50M
  5. Agora, só falta adaptar o /etc/lighttpd/lighttpd.conf às suas necessidades.
    Por exemplo, para definir a raiz de um determinado domínio, use:
    $HTTP["host"] == "www.exemplo.com.br" {
      server.document-root = "/var/www/www.exemplo.com.br"
    }
    

 

Grupos: