Como Rodar Múltiplos Sites em Uma Instância EC2 da AWS

por | 19.abr.2016 | AWS

Rodando Mais de Um Site em Uma Única Instância EC2 da AWS

Se você está querendo saber como rodar múltiplos sites em uma única instância EC2 no Amazon Web Services este guia será ideal para você! =)

Este guia ajudará você no processo de configuração dos Hosts Virtuais do Apache (vhosts) em seu servidor AWS Linux para que ele possa suportar vários sites, domínios ou subdomínios. É este recurso que permitirá ao Apache saber qual host/domínio está sendo solicitado e, portanto, enviar a página correta ao visitante.

Não será preciso utilizar o serviço de DNS Route 53 para rodar os sites em uma instância. =)

Não se preocupe porque é bem menos complicado do que parece. Tentarei deixar as explicações menos técnicas possíveis, pois sei que você está aqui buscando algo simples e objetivo.

Premissas

Este guia assume que você já esteja usando uma instância EC2 com o LAMP configurado no Amazon Linux. Se ainda não estiver com o LAMP configurado em seu servidor, siga as instruções deste artigo: Como Instalar um Servidor Web LAMP na AWS EC2.

Estrutura de Arquivos

Antes de qualquer coisa, precisamos entender um pouco sobre a estrutura dos diretórios e seus arquivos:

Lembre-se: Seu site padrão (default site) está configurado para ser executado em /var/www/html.

Você pode definir o diretório para os vhosts em qualquer lugar que desejar. Minha recomendação é a seguinte:

  1. Criar o diretório /var/www/vhosts para acolher todos as pastas de seus vhosts;
  2. Nomear cada pasta de seus vhosts com o nome de domínio do site, por exemplo, /var/www/hosts/labinauta.com.br

Por padrão, não existe uma pasta para os vhosts. Então você pode criar uma com o seguinte comando:

$ sudo mkdir /var/www/vhosts/

Em seguida, crie uma pasta para cada site/domínio/subdomínio que você deseja hospedar usando o mesmo comando da etapa acima:

$ sudo mkdir /var/www/vhosts/exemplo.com.br

À medida que você hospedar mais sites/domínios/subdomínio, você eventualmente acabará com uma estrutura assim:

/var/www/vhosts/exemplo.com

/var/www/vhosts/sub.exemplo.com

/var/www/vhosts/sub2.exemplo.com

Adicionando o arquivo de configuração do vhost

A maioria das configurações do Apache não tem um vhost.conf (que é o arquivo de configuração do vhost) por padrão, portanto, vamos criar um arquivo vhost vazio:

$ cd /etc/httpd/conf.d
$ sudo touch vhost.conf
Nota: Pelo fato do arquivo vhost.conf estar presente no diretório /etc/http/conf.d, ele será carregado automagicamente quando o Apache for carregado!

Em seguida, devemos editar o arquivo e inserir as configurações do vhost nele. Você pode usar o Nano para isto:

$ sudo nano /etc/httpd/conf.d/vhost.conf

Inserindo as Configurações

Site Padrão

Configurar um site padrão é opcional. Porém, se você configurá-lo, toda vez que o Apache não puder encontrar a configuração de um determinado site em seu arquivo vhost, ele dará ao usuário a página do site padrão ao invés de uma página de erro ou de encaminhar a página errada.

Para definir o site padrão, adicione o seguinte em seu arquivo vhost.conf e customize conforme necessário.


<VirtualHost *:80>
  # Leave this alone. This setting tells Apache that
  # this vhost should be used as the default if nothing
  # more appropriate is available.

  ServerName default:80

  # REQUIRED. Set this to the directory you want to use for
  # your “default” site files.

  DocumentRoot /var/www/html

  # Optional. Uncomment this and set it to your admin email
  # address, if you have one. If there is a server error,
  # this is the address that Apache will show to users.

  #ServerAdmin you@exemplo.com

  # Optional. Uncomment this if you want to specify
  # a different error log file than the default. You will
  # need to create the error file first.

  #ErrorLog /var/www/vhosts/logs/error_log
</VirtualHost>
Nota: O bloco <VirtualHost *:80> indica ao Apache para conferir a informação para todas as requisições na porta 80.

Sites Adicionas

Agora você deve configurar cada site/domínio/subdomínio que você deseja servir. A configuração é parecida com a de cima, com algumas pequenas diferenças:


<VirtualHost *:80>
  # REQUIRED. Set this to the host/domain/subdomain that
  # you want this VirtualHost record to handle.

  ServerName seudominio.com

  # Optional. You can specify additional host names that
  # serve up the same site. This can be top-level, domains,
  # sub-domains, and can even use wildcard subdomains such
  # as *.yourdomain.com - just separate each host name
  # with a single space.

  #ServerAlias www.seudominio.com seudominio.net

  # REQUIRED. Set this to the directory you want to use for
  # this vhost site's files.

  DocumentRoot /var/www/vhosts/seudominio.com

  # Optional. Uncomment this and set it to your admin email
  # address, if you have one. If there is a server error,
  # this is the address that Apache will show to users.

  #ServerAdmin you@exemplo.com

  # Optional. Uncomment this if you want to specify
  # a different error log file than the default. You will
  # need to create the error file first.

  #ErrorLog /var/www/vhosts/logs/error_log

  # REQUIRED. Let's make sure that .htaccess files work on 
  # this site. Don't forget to change the file path to
  # match your DocumentRoot setting above.
  
  <Directory /var/www/vhosts/seudominio.com>
    AllowOverride All
  </Directory>
</VirtualHost>  

Não se esqueça de alterar a configuração acima conforme as suas próprias configurações.

Configurações a serem alteradas:

ServerName

ServerAliasopcional

DocumentRoot

ServerAdminopcional
ErrorLogopcional

<Directory /var/www/vhosts/seudominio.com>
Inclua um bloco <VirtualHost *:80> inteiro para cada site/domínio/subdomínio que você tiver. Inclua um bloco abaixo do outro. Cada um com sua própria configuração. Sempre verifique as configs citadas acima.

Salvando e Reiniciando o Apache

Ao término da configuração de seus Virtual Hosts, salve o arquivo vhosts.conf (ctrl + x, caso esteja usando o Nano) e reinicie o serviço do apache:

$ sudo service httpd restart

DNS

O último passo é criar um registro do tipo A (A Record) em seu serviço de DNS para cada site/domínio/subdomínio que você criou. Este registro deve apontar para o IP público de sua instância AWS EC2.

Nota: É preferível que você atribua um Elastic IP à sua instância, pois este endereço IP será estático.

 

Ajustando as Permissões (para WordPress)

Alguns recursos do WordPress necessitam de permissão de escrita na pasta raiz (document root) do Apache. O servidor web roda com o usuário apache, portanto, você precisar adicioná-lo ao grupo www que foi criado no guia sobre como configurar um LAMP server.

1. Adicione o usuário apache ao grupo www.

$ sudo usermod -a -G www apache

2. Altere o ownership de arquivo do diretório /var/www e de seus conteúdos para o usuário apache.

$ sudo chown -R apache /var/www

3. Altere o ownership de grupo do diretório /var/www e de seus conteúdos para o grupo www.

$ sudo chgrp -R www /var/www

4. Altere as permissões de diretório do /var/www e de seus subdiretórios a fim de adicionar permissões de escrita ao grupo e definir o ID do grupo nos futuros subdiretórios.

$ sudo chmod 2775 /var/www
$ find /var/www -type d -exec sudo chmod 2775 {} \;

5. Altere recursivamente as permissões de arquivo de /var/www e de seus subdiretórios para adicionar as permissões de grupo.

$ find /var/www -type f -exec sudo chmod 0664 {} \;

6. Reinicie o Servidor Web Apache para validar as alterações do grupo e das permissões.

$ sudo service httpd restart

Conclusão

Prontinho! Agora você já é capaz de hospedar vários sites em uma instância EC2 da AWS. Qualquer dúvida ou sugestão, fique a vontade de comentar logo abaixo.