Instalando Lighttpd com PHP, MySQL, Virtual hosting, WebDAV, Autenticação e Userdir Autoria de Daniel Bristot de Oliveira 20/06/2006 Última Atualização 25/08/2006 FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD O lighttpd à um servidor web leve, rã pido, seguro e flexã vel que tem seu desenvolvimento voltado para ambientes de alta performance. Uma de suas qualidades à o baixo consumo de memã³ria; alã m disso, benchmarks mostram que ele possui um rendimento superior a vã rios outros servidores. Por qu㪠utilizã -lo? - Ele à compatã vel com sistemas Unix como os BSD, Linux, SGI IRIX, alã m de sistemas Windows com o CygWin. - Consome poucos recursos. - à timo desempenho frente a outros servidores. - Interface de configuraã à o limpa e clara, facilitando administraã à o. - Suporte a PHP e MySQL. - à livre, seguro e estã vel. Caracterà sticas Algumas caracterã sticas: - Virtual Host - Listagem virtual de diretã³rios - Re-escrita de URL, redirecionamento HTTP - Suporte a arquivos grandes - Compressà o de arquivos de saã da com chace transparente (reduã à o gzip, bzip2 - Autenticaà à o (basic, digest - backends: plain, htpasswd, htdigest, ldap - Downloads rã pidos e seguros - Server Side Includes - Identificaà à o de usuã rios - FastCGI, CGI, SSI PHP-Support: - Desempenho igual ou superior ao apache + mod_php4 - Suporte a mãºltiplos processos do PHP via interface FastCGI e CGI - suporte a "Code Caches" como Turckmm, APC e eaccelarator - FastCGI com Balanceamento de carga (Um servidor web distribuindo cagar para vã rios servidores PHP Instalando O lighttpd pode ser instalado via ports: a localizaã à o do lighttpd no ports à /usr/ports/www/lighttpd. Entre o no diretã³rio e execute o comando make install # cd /usr/ports/www/lighttpd # make install Após isto irã aparecer a seguinte tela no terminal. Nela à possã vel escolher algumas opã ões de compilaã à o para o lighttpd. Neste caso desabilitarei todas as opã ões. OBS: O MySQL deste menu nã o se refere a ligaã à o do MySQL com o PHP. Após isto a instalaã à o deverã terminar sem mais perguntas. Configuraà à o do Sistema Operacional O arquivo de inicializaã à o do lighttpd fica em /usr/local/etc/rc.d/lighttpd.sh; para ativar a inicializaã à o do lighttpd como sistema operacional basta adicionar lighttpd_enable="yes" ao /etc/rc.conf. Provavelmente na primeira inicializaã à o irã o acontecer alguns erros, jã que na instalaã à o o diretã³rio base onde ficarã o as pã ginas e os arquivos de log nã o foram criados. Para eliminar esses problemas, crie os seguintes diretã³rios e arquivos: # mkdir /usr/local/www/data/ # touch /var/log/lighttpd.access.log # touch /var/log/lighttpd.error.log # chown www /var/log/lighttpd.access.log # chown www /var/log/lighttpd.error.log
Agora o lighttpd irã iniciar normalmente. Para testar crie um arquivo como o nome index.html em /usr/local/www/data/ e acesse via browser a sua mã quina; se a pã gina aparecer, obviamente, tudo ocorreu bem. Configuraà à o Bà sica do Lighttpd O arquivo de configuraã à o do lighttpd fica em /usr/local/etc/lighttpd.conf, e somente o usuã rio root pode editã -lo. O arquivo de configuraã à o no inã cio parece ser um pouco complicado, porã m com o tempo ele se torna simples e fã cil de trabalhar. As linhas que iniciam com o caractere "#" sã o conseideradas comentã rios. As atribuiã ões de valores a diretivas sã o feitas da seguinte forma: Para uma diretiva mono valorada: diretiva = "valor" Ex: server.document-root = "/usr/local/www/data/" Para diretivas multi valoradas: diretiva = ("valor 1", "valor 2" OBS: sã o aceitas quebras de linha entre valores, como no exemplo abaixo. Ex: index-file.names = ( "index.php", "index.html", "index.htm", "default.htm" Vamos observar algumas das diretivas mais importantes do lighttpd.conf: Diretiva server.modules: Esta diretiva define os mã³dulos que estã o ativos durante a execuã à o do lighttpd. Esta diretiva contã m uma sã rie de linhas comentadas; para habilitar algum mã³dulo basta descomentar a linha referente ao mesmo. Lembre-se de habilitar apenas os mã³dulos que voc㪠irã utilizar. Diretiva server.document-root. Define o caminho para o diretã³rio inicial, que por padrã o à /usr/local/www/data/. Altere-o como quiser. Uma boa dica à /var/www/hostname, onde HOSTNAME à o nome do seu domã nio. Diretiva server.errorlog Define o arquivo de log de erros. Diretiva accesslog.filename Define o arquivo de log de acesso. Diretiva index-file.names Define o nome dos arquivos de index que o servidor deve procurar. A ordem em que eles estã o dispostos influencia na escolha. Diretiva server.username Define o UID que o servidor irã executar. Diretiva server.groupname Define o GID que o servidor irã executar. Integrando com o PHP e MySQL A integraã à o do PHP e MySQL à feita atravã s do FastCGI, apenas uma coisa que deve-se ter em mente, à que o MySQL nã o estã ligado ao servidor Web mas sim ao PHP. Primeiramente iremos instalar o PHP, Partimos do presuposto que voc㪠jã tem o MySQL instalado, caso nã o tenha, siga o exemplo de instalaã à o do MySQL a partir do meu tutorial do Postfix. Instalando o PHP
O PHP serã instalado via ports, para isto entre no diretã³rio /usr/ports/lang/phpx, onde X à a versã o do php, atualmente 4 ou 5, e execute o seguinte comando. # make config Aparecerà a seguinte tela. Habilite as mesmas opã ões e instale o PHP com o seguinte comando.# make install O PHP estã instalado. agora vamos integrar com o MySQL Um mã³dulo do php irã fazer a ligaã à o entre o MySQL e o PHP, ele estã disponã vel no ports. Para instalar execute os seguintes comandos. # cd /usr/ports/databases/phpx-mysql # (onde X à a versã o do PHP # make install Configurando o lighttpd com o PHP Na diretiva server.modules, descomente a linha referente ao "mod_fastcgi". e adicione as linhas abaixo em algum lugar no arquivo de configuraã à o. fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/bin/php", "min-procs" => 3, "max-procs" => 5, "idle-timeout" => 20, "max-load-per-proc" => 10, Onde: socket à onde ficarã os sockets de comunicaã à o entre o lighttpd e o PHP. bin-path à onde estã localizado o executã vel do PHP. min-procs Número mã nimo de processos do PHP que ficarã o esperando trabalho. max-procs Número mã ximo de processos do PHP que ficarã o esperando trabalho. idle-timeout Tempo que um processo do PHP ficarã vivo sem trabalho, apã³s este tempo ele morre max-load-per-proc mã dia de carga mã xima em um processo antes de um novo processo ser lanã ado. As opã ões referentes ao nãºmero de processos tem uma grande influãªncia no desempenho do servidor, faã a testes e ache os melhores valores par a seu sistema. Se sob muita carga seu servidor acusar erro "500 internal server error" aumente o nãºmero de processos do PHP. Para testar se tudo estã certo, crie um arquivo chamo info.php, no document-root de se servidor, com o seguinte conteãºdo <?php phpinfo(;?> Caso abrir a pã gina de informaã ões do PHP tudo deu certo. Configurando Userdir Habilite o mã³dulo mod_userdir descomentando a sua linha na diretiva server.modules, e insira as seguintes linhas no arquivo de configuraã à o. userdir.path = "public_html" userdir.basepath = "/home/" O caminho do diretã³rio do usuã rio à formado por: "userdir.basepath"/"usuã rio"/"userdir.path". Para o usuã rio daniel, o caminho de seu diretã³rio seria /home/danie/public_html. Virtual Host Virtual host à um meio de um servidor web ser capaz de servir pã ginas para diversos domã nios.
O lighttpd ofereã e trãªs modulos para habilitar esta caracterã stica. mod_evhost, mod_mysql_vhost e mod_simple_vhost. Neste artigo trataremos a utilizaã à o do modulo mod_simple_vhost. Este à o mã todo mais simples para a criaã à o de hosts virtuais, ele exige a configuraã à o de apenas trãªs diretivas. simple-vhost.server-root Caminho para o diretã³rio raiz de cada host virtual. simple-vhost.default-host O host virtual padrã o simple-vhost.document-root Diretório que contã m a pã gina inicial sobre o diretã³rio do host virtual O caminho para o diretã³rio raiz do servidor virtual à formado por: simple-vhost.server-root + Hostname + document-root Exemplo: simple-vhost.server-root = "/var/www/" simple-vhost.default-host = "www.examplo.org" simple-vhost.document-root = "pages" O caminho para o index do host vitual dominio.net seria: /var/www/dominio.net/pages/ Para a ativaã à o de um domã nio virtual, basta o diretã³rio formado pelas diretivas existir. Caso o caminho do dominio solicitado nã o exister, o endereã o definido em simple-vhost.default-host serã exibido, neste caso www.examplo.org. Uso de condicionais Em alguns casos o caminho pode nã o ser o obtido apartir das configuraã ões do mã³dulo simple-vhost. Esta situaã à o pode ser resolvilda com a utilizaã à o de condicionais, como no caso abaixo, quando solicitado o dominio dbristot.info o conteãºdo do deiretã³rio /var/www/userdir/daniel serã exibido. $HTTP["host"] == "dbristot.info" { server.document-root = "/var/www/userdir/daniel" } Isto à útil para fazer alias de hosts virtuais. Como por exemplo, para que dominio.net e www.dominio.net obtenham o mesmo caminho. $HTTP["host"] == "www.dominio.net" { server.document-root = "/var/www/dominio.net/pages/" }WebDAV O webdav à um mã todo para troca de arquivos via protocolo HTTP1.1 Para habilitar o mã³dulo do WebDAV basta adicionar mod_webdav na lista de mã³bulos. Existem duas diretã vas de configuraã à o para o WebDAV. webdav.activate Habilita ou desabilita o WebDAV para um diretã³rio. Padrà o: disable (desabilitado webdav.is-readonly Acesso somente leitura Padrà o: writable (gravã vel Exemplo: Para habilitar o WebDAV como somete-leitura para os diretã³rios que tenham o nome 'dav'. $HTTP["url"] =~ "^/dav($ /" { webdav.activate = "enable" webdav.is-readonly = "enable" }Autenticaà à o O mã³dulo mod_auth à responsã vel pela autenticaã à o no Lighttpd. O lighttpd suporta os dois mã todos de autenticaã à o definidos na RFC 2617:
basic O mã rodo basic transfere o nome de usuã rio e senha em texto puro pela rede, apenas os codifica em base64. digest O mã todo digest envia apenas uma valor md5; assim tornando-o mais seguro que o basic. Dependendo do mã todo o lighttpd oferece diferentes meios para armazenamento de senhas. Para o mã todo basic: plain Armazena as senhas em formato texto puro htpasswd Armazena as senhas em formato md5, porã m nescessita do htpasswd, disponivel no Apache htdigest Armazena as senhas em formato md5, nescessita apenas de um script. ldap Utiliza base de dados Ldap Para o mã todoor digest: plain htdigest Aquà utilizaremos o mã todo digest com htdigest para armazenamento de senhas. Gerando base de dados de usuã rio Serà necessã rio o script abaixo para a criaã à o do arquivo de senha. #!/bin/sh user=$1 realm=$2 pass=$3 hash=`echo -n "$user:$realm:$pass" md5 cut -b -32` echo "$user:$realm:$hash" Salve o script com o nome htdigest.sh. Para utiliza-lo entre com os parametros Usuà rio Descrià à o Senha e desvie a saã da para o arquivo de senha, como abaixo: #./htdigest.sh usuario Local senha >> /usr/local/etc/htdigest Verificando... # cat /usr/local/etc/htdigest daniel:download:3a99e549592d6163659b6b0e5d0a8b0f usuario:local:6b063763659086818e455206bcc95e7e Configurando o lighttpd para autenticaã à o Descomente a linha referente ao mã³dulo "mod_auth". Diretà vas de configuraã à o: auth.debug Define o mode debug. 0 para desativo, 1 para log de usuã rio, e 2 para debug. default=0 auth.backend Define o mã todo de altenticaã à o. auth.backend.<mã TODO DE ALTENTICAà ÃO>.userfile Define o caminho para o arquivo de senhas. Altere o <Mà TODO DE ALTENTICAà ÃO> pelo mã todo utilizado, por exemplo htdigest. Para a autenticaã à o ter efeito precisamos de auth.require = ( <lado esquedo da url> => ( "method" => "digest"/"basic", "realm" => <realm>, "require" => "usuã rio=<username> valid-user" Por exemplo: auth.debug = 0 auth.backend = "htdigest" auth.backend.htdigest.userfile = "/usr/local/etc/htdigest" auth.require = ( "/dav" => ( "method" => "digest", "realm" => "Pasta da Web", "require" => "valid-user",
Atenà à o com o abrir e feixar de chaves, as veses isto causa erros estranhos. "http://dbristot.info/wiki/index.php?title=lighttpd" Retirado de