Desvendando o Mundo do GNU/Linux Headline Animator

domingo, 1 de abril de 2012

Configuração de Servidores Web



Os servidores web são a espinha dorsal da internet, são eles os responsáveis por hospedar todas as páginas, incluindo os mecanismos de busca e servem como base para todo tipo de aplicativo via web, incluindo webmails.
Nos primórdios da internet, eram utilizadas apenas páginas html estáticas e scripts CGI. O Apache em si ainda continua oferecendo suporte a esses recursos básicos, mas pode ser expandido por meios de módulos adicionais, passando a suportar scripts em PHP, acessar banco de dados MySQL, entre outras funcionalidades.
Sempre quando uma página em PHP é solicitada ou outra linguagem, entra em ação o módulo apropriado, que faz o processamento necessário devolvendo ao Apache a página em html que será exibida. A combinação de tudo isso chama-se “LAMP” (Linux + Apache + MySQL + PHP).

Instalando um servidor LAMP


Segundo o site “Netcraft” mais de 50% dos servidores do mundo rodam o Apache, a maior parte deles sobre o Linux. Na realidade esse percentual é um pouco maior, tendo em vista que um grande número de administradores configuram seus servidores para divulgarem falsas informações a respeito do servidor web sendo utilizado, assim deixam de fornecer informações que possam facilitar ataques. Estes servidores aparecem nas pesquisas como “other”.
O Apache é um dos servidores web mais antigos e um dos mais seguros. Além do servidor web, você quase sempre precisará configurar também um servidor DNS, para responder pelo domínio do seu site ou empresa, saber configurar o DNS corretamente é muito importante, pois você pode ter problemas no envio dos e-mails ou com o registro do domínio.

O Apache permite hospedar vários sites em um único servidor, recurso chamado de “Virtual Hosts”.
Os sites mais acessados são capazes de saturar um servidor de médio porte, por isso configurar vários sites em um único servidor é a forma de economizar recursos e trabalho. Mas ao hospedar vários sites, passamos a ter uns probleminhas, é necessário disponibilizar alguma forma de acesso aos arquivos, para que os responsáveis possam atualizar suas páginas sem afetar arquivos dos outros, também é necessário um sistema de quotas para cada um.


Instalando o Apache


O Apache é dividido em duas famílias: Apache 2.x e Apache 1.3 que apesar de ser um pouco antigo ainda é utilizado em muitos servidores.
O Apache 2 trouxe melhorias significantes, as quais podemos destacar:
Desempenho, novos módulos, e mais segurança tendo em vista que esse é o ponto forte do Apache

Ao instalar o Apache 2, o suporte a SSL é instalado automaticamente junto com o mesmo pacote, mas ainda é necessário ativá-lo na configuração, como veremos adiante. Instale também o pacote apache2-utils.

# apt-get install apache2 apache2-utils



Caso queira ativar o suporte a páginas seguras instale o pacote “ssl-cert” pois ele é o responsável por dar suporte a SSL e gerar os certificados.

# apt-get install ssl-cert

No Centos ou Fedora, instale o pacote “httpd”

# yum install httpd

Muito diferente do Debian e seus derivados, o serviço não será configurado para ser ativado no boot, ou seja, toda vez que o sistema inicializar. Para esse procedimento usamos dois comandos: Um para ativar o serviço e o outro para criar os links para o início automático do serviço. Observe!!!


# service http start
# chkconfig http on

Como observado anteriormente no Debian sua estrutura é um pouco diferente, pois chama-se “apache2”, para reiniciar o servidor você usa, respectivamente os comandos “/etc/init.d/apache2 restart”, “service httpd restart”.
Após tudo feito é hora de ver se tudo estar correto, acessando o endereço “127.0.0.1” você verá uma página de boas-vindas, indicando que o servidor estar funcional, Caso não tenha nenhum firewall pelo caminho ele será acessado normalmente por outros computadores da rede local ou até mesmo da internet.




Entendendo a organização dos arquivos


A principal característica do Apache é que ele é modular, ou seja, ele trabalha em união com outros módulos que lhe permite funcionalidades extras. Sua funcionalidade é única: desempenhar sozinho todas as funções e entregar páginas html e outros arquivos aos clientes. Qualquer outra função diferente da citada é realizada por módulos adicionais.

Por exemplo, quando você acessa uma página em PHP em outro site que também roda sobre o Apache, ele lê o arquivo no HD e repassa a solicitação para o módulo “mod_php”, esse é o módulo encarregado de processar arquivos PHP, ele por sua vez, aciona o interpretador PHP, que faz o processamento da página e a entrega, já processada, ao Apache, que por sua vez a entrega ao cliente. Mas digamos que fosse necessário acessar um banco de dados ( como um fórum ou um gestor de conteúdo) aqui entra em ação outro módulo, o “php5-mysql” que dar permissão ao interpretador PHP acessar o banco de dados:

Cliente---Apache---mod_php---interpretador PHP---php5-msql---Servidor MySQL

Soa estranho afirmar que depois de toda essa volta que o Apache faz, consiga entregar a página em tempo, mas é justamente essa sua boa divisão das tarefas que faz com que ele seja tão rápido e seguro. Graças a equipe de desenvolvimento, é muito raro que sejam descobertos problemas graves em sua segurança ou no interpretador PHP.



No Debian e seus derivados



Em distribuições derivadas do Debian, a arquitetura modular do Apache estende-se também aos arquivos de configuração, onde a mesma é centralizada em um único arquivo, o “httpd.conf”, que por opção incluí referências a arquivos externos, os chamados (includes), que deixam mais segmentada e organizada a configuração.

A organização do Apache 2 nas distribuições derivadas do Debian parece ser complicada, mas depois de seu entendimento, a coisa fica bastante simples e lógica:
Todos os arquivos de configuração estão dentro de /etc/apache2, dentro de “sites-available”
e “sites-enabled”, temos a configuração dos sites hospedados; as pastas “ mods-available”
e “mods-enabled” armazena as configurações dos módulos, no arquivo “ports.conf”
vai as configurações das portas TCP que o servidor escutará; o arquivo “apache2.conf”
armazena diversas configurações relacionadas ao funcionamento do servidor,
a pasta “conf.d” armazena arquivos para configurações adicionais.

O apache é capaz de hospedar vários sites, onde cada um é representado por um arquivo de configuração independente. Vamos imaginar uma empresa de hospedagem, que mantém um servidor com 5.000 sites. Quando cada cliente registra seu site e faz a assinatura do plano de hospedagem, você cria um novo arquivo dentro da pasta “sites-available” e um link apontando para ele na pasta “sites-enabled”.

A primeira pasta armazena as configurações de todos os sites, ou seja, os (virtual hosts), mas somente os sites que estiverem presentes na pasta “site-enabled” é que ficarão disponíveis.
Ao invés de criar e remover os links manualmente, você pode usar os comandos respectivamente:
a2ensite” e “a2dissite”, para ativar e desativar um site que esteja configurado em “/etc/apache2/sites-available/minhaempresa”,

# a2ensite minhaempresa (ativa)

# a2dissite minhaempresa (desativa)
Quando o Apache é instalado, ele cria por padrão o arquivo “/etc/apache2/sites-available/default”, que contém a configuração de um site “raiz”, e usa por padrão a pasta “/var/www”, se o seu servidor vai hospedar um único site esta configuração é suficiente, mas se for hospedar vários sites é necessário criar uma pasta e um arquivo de configuração para cada site.

Seu servidor pode sem nenhum problema, hospedar dois dominíos, por exemplo:
joao.com.br” e “maria.com.br”, um servidor DNS mantido por você, pode ser configurado para responder pelos dois dominíos. Em ambos, fornencendo o endereço IP do seu servidor web aos seus clientes. Na sua configuração criamos os arquivos “/etc/apache2/sites-available/joao” e “/etc/apache2/sites-available/maria”, cada um utilizando uma pasta diferente, também pode ser criados dentro do diretório pessoal do usuário, como em:
/home/joao/html” e “/home/maria/html”, ou até mesmo dentro de “/var/www/”, como em:
/var/www/joao”, e “/var/www/maria”.

Desta forma quando o cliente digitar http://joao.com.br, o servidor que responde pelos registros “.br”, passará a requisição para seu servidor DNS, a qual responde pelo endereço do servidor web. Ao acessar o servidor, o browser solicita o site “joao.com.br” e o servidor responde a solicitação enviado o arquivo “/var/www/joao/index.html” ou “index.php” para o cliente.

A mesma ideia das pastas separadas também se aplica aos módulos. A pasta “mods-available” contém configurações e scripts para todos os módulos disponíveis, mas só são realmente carregados aqueles que são referenciados por um link em “mods-enabled”.

Assim como usamos comandos específicos para ativar e desativar um site, também existe comandos
para os módulos, são eles:
a2enmod” e “a2dismod”, para desativar o suporte a PHP

# a2dismod php5

e para ativá-lo novamente, você usaria:

#a2enmod php5

Vale lembrar que, uma vez um módulo ativo ele passa a ser automaticamente disponível para todos os sites hospedados.
Para que as alterações tenham efeito é necessário reiniciar o serviço, “/etc/init.d/apache2 force-reload” ou “/etc/init.d/apache2 restart”

# /etc/init.d/apache2 reload (esse comando é mais recomendado pelo simples fato de que, ele apenas atualiza as configurações sem interromper o serviço).

Outra configuração que foi separada, é a configuração de portas, que fica no arquivo “ports.conf”
por padrão esse arquivo contém uma única linha, como em:

Listen 80

É justamente aqui que você altera a porta padrão do seu servidor, ou incluí mais portas, como é o caso de usar o suporte a SSL.

Listen 80
Listen 443
Listen 8080
Por último temos o arquivo “apache2.conf”, que contém o resto das configurações, é esse arquivo que você precisará alterar quando necessitar ajustar o número de processos usados pelo Apache ou aumentar o número de conexões simultâneas permitidas pelo servidor.


Instalando e configurando o suporte a PHP


Como já foi mencionado no inicio existiam apenas páginas html estáticas, após vieram os cripts CGI (escritos em Perl), cuja função era dar permissão para criação de vários formulários e automatizar funções, em seguida surge o PHP que rapidamente foi adotado como linguagem padrão

A linguagem do PHP é bastante flexível, onde o script PHP é 100% mais rápido e mais seguro que o
antigo script CGI. Desentrelaçando, o script CGI é um executável que é alocado na memória, e é executado e descarregado toda vez que for feita uma nova requisição, já o PHP fica constantemente
alocado na memória e vai executando os comandos dos scripts nas páginas.


Instalando o MySQL

Para quem não conhece o MySQL ele é um banco de dados extremante versátil, ele permite você acessar o banco dados a partir de um script em PHP, ou com um aplicativo desenvolvido em c ou c++.
A primeira coisa a se fazer é instalar o servidor MySQL, em distribuições Debian e derivados o pacote chama-se “mysql-server”.

# apt-get install mysql-server

No CentOS e Fedora instale os pacotes “mysql” “mysql-server”

# yum install mysql mysql-server

Se desejar ter mais praticidade instale os pacotes, “mysql-client” ( que permite acessar os dados e realizar modificações no banco de dados ), “mysql-navigator” ( interface gráfica ).
Antes de inicializar o serviço, execute comando “mysql_install_db” que criará a base de dados mysql usada para armazenar a configuração do servidor MySQL.
Depois basta iniciar o serviço, por padrão o MySQL tem um usuário chamado “root” esse por sua vez não é o superusuário do sistema, logo essa conta vem sem senha e é necessário definir uma senha para ela, então execute o comando:

# mysqladmin -u root -p password (senha antiga)


Administração básica do banco de dados


É de suma importância que você conheça os comandos para administrar um banco de dados via linha de comando, para acessar o banco de dados execute:

# mysql -u root -p <enter>

Enter password <senha>
Dentro do prompt do MySQL execute o comando “CREATE DATABASE” para criar uma base de dados, seguido de um nome de sua escolha, como em:

mysql> CREATE DATABASE cadastro;

Para visualizar a base criada use o comando “SHOW DATABASES”, ao ser executado o comando citado, ele listará três bases criadas na instalação: “mysql” e “information_schema” são para uso interno e a “test” é uma DB vazia.
Para remover um usuário usamos:

mysql> DROP USER joão

Para remover uma base use o comando:

mysql> DROP DATABASE cadastro

Nenhum comentário:

Postar um comentário