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 pre-suposto 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 configAparecerá 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.