Tutorial

Como configurar Apache Virtual Hosts no Ubuntu 14.04 LTS

Published on December 3, 2014
Português
Como configurar Apache Virtual Hosts no Ubuntu 14.04 LTS

###Introdução

O servidor web Apache é a forma mais popular de servir conteúdo web na Internet. Ele representa mais da metade de todos os websites ativos na Internet e é extremamente poderoso e flexível.

O Apache divide suas funcionalidades e componentes em unidades individuais que podem ser personalizadas e configuradas independentemente. A unidade básica que descreve um determinado site ou um domínio é chamada virtual host.

Essas denominações permitem ao administrador utilizar um servidor para hospedar múltiplos sites e domínios a partir de uma simples interface ou IP através da utilização do mecanismo de correspondência . Isto é relevante para quem quer hospedar mais de um site em um único VPS (Virtual Private Server).

Cada domínio que esteja configurado irá direcionar o visitante para um diretório específico que mantém as informações daquele site, nunca indicando que o mesmo servidor também é responsável por outros sites. Este esquema é expansível sem qualquer limite de software desde que seu servidor possa suportar a carga.

Neste guia, vamos orientá-lo sobre como configurar Apache virtual hosts em um VPS Ubuntu 14.04. Durante este processo, você aprenderá como servir diferentes conteúdos para diferentes visitantes dependendo de qual domínio eles estão requisitando.

##Pre-requisitos

Antes de você começar este tutorial, você deve criar um usuário non-root conforme descrito nos passos 1-4 aqui.

Você também precisará ter o Apache instalado a fim de trabalhar com estes passos. Se você não tiver feito isto, você poderá ter o Apache instalado em seu servidor através do apt-get:

sudo apt-get update
sudo apt-get install apache2

Após a conclusão dessas etapas, podemos começar.

Para os objetivos deste guia, minha configuração fará um virtual host para example.com e outro para teste.com. Estes serão referenciados ao longo do guia, mas você deve substituir seus próprios domínios ou valores enquanto acompanha.

Para aprender como configurar seus nomes de domínio com DigitalOcean, siga este link. Se você não tiver domínios disponíveis para utilizar, você poderá utilizar valores fictícios.

Iremos mostrar como editar seu arquivo hosts local posteriormente, para testar a configuração, se você estiver usando valores fictícios. Isto o permitirá testar sua configuração pelo seu computador doméstico, mesmo que seu conteúdo não esteja disponível através do nome de domínio para outros visitantes.

#Passo um - Crie a estrutura de diretórios

O primeiro passo que vamos tomar é criar uma estrutura de diretório que irá armazenar os dados do site que estará servindo aos visitantes.

Nosso document root (o diretório de nível superior que o Apache olha para encontrar o conteúdo para servir) será definido para diretórios individuais sob o diretório /var/www. Vamos criar um diretório aqui para ambos os virtual hosts que estamos planejando fazer.

Dentro de cada um desses diretórios, vamos criar o diretório public_html que irá manter nossos arquivos reais. Isto nos dá certa flexibilidade em nossa hospedagem.

Por exemplo, para nossos sites, nós vamos criar nossos diretórios assim:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

As partes em vermelho representam os nomes de domínio que estamos querendo servir através de nossos VPS.

#Passo Dois - Conceda Permissões

Agora temos a estrutura de diretórios para nossos arquivos, mas eles são de propriedade de nosso usuário root. Se quisermos que nosso usuário regular esteja apto a modificar arquivos em nossos diretórios web, podemos alterar o proprietário fazendo isto:

sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

A variável $USER terá o valor do usuário com o qual você está logado atualmente quando você pressionou “ENTER”. Fazendo isto, nosso usuário regular agora detém os sub-diretórios public_html onde estaremos armazenando nosso conteúdo.

Devemos também modificar um pouco nossas permissões para garantir que o acesso de leitura é permitido para o diretório web em geral e todos os arquivos e pastas que ele contém de modo que a páginas possam ser servidas corretamente:

sudo chmod -R 755 /var/www

Seu servidor web agora deve ter as permissões que ele precisa para servir o conteúdo, e seu usuário deve ser capaz de criar conteúdo dentro das pastas necessárias.

#Passo Três - Crie as Páginas Demo para cada Virtual Host

Temos nossa estrutura de diretório no lugar. Vamos criar algum conteúdo para servir.

Vamos fazer apenas uma demonstração, assim nossas páginas serão bastante simples. Vamos apenas fazer uma página index.html para cada site.

Vamos começar com example.com. Podemos abrir um arquivo index.html em nosso editor digitando:

nano /var/www/example.com/public_html/index.html

Neste arquivo, crie um documento HTML simples que indica o site que está conectado. Meu arquivo se parece com isso:

<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success!  The example.com virtual host is working!</h1>
  </body>
</html>

Salve e feche o arquivo quando terminar.

Podemos copiar este arquivo para usá-lo como base para nosso segundo site digitando:

cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

Podemos, então, abrir o arquivo e modificar as informações pertinentes:

nano /var/www/test.com/public_html/index.html

<p>

<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body>
    <h1>Success!  The test.com virtual host is working!</h1>
  </body>
</html>

Salve e feche o arquivo também. Agora você tem as páginas necessárias para testar a configuração de virtual host.

#Passo Quatro - Crie novos arquivos de Virtual Hosts

Arquivos de virtual host são arquivos que especificam a configuração real do nosso virtual host e determina como o servidor web Apache irá responder às várias requisições de domínio.

O Apache vem com um arquivo padrão de virtual host chamado 000-default.conf que podemos usar como ponto de partida. Vamos copiá-lo para criar um arquivo de virtual host para cada um de nossos domínios.

Vamos começar com um domínio, configurá-lo, copiá-lo para nosso segundo domínio, e então fazer os pequenos ajustes necessários. A configuração padrão do Ubuntu requer que cada arquivo de virtual host termine em .conf.

###Crie o primeiro arquivo de Virtual Host

Começe copiando o arquivo para o primeiro domínio:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Abra o novo arquivo em seu editor com privilégios de root:

sudo nano /etc/apache2/sites-available/example.com.conf

O arquivo será algo parecido com isso (eu removi os comentários aqui para tornar o arquivo mais acessível):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Como você pode ver, não há muito aqui. Vamos personalizar os itens aqui para nosso primeiro domínio e adicionar algumas diretivas adicionais. Esta seção de virtual host corresponde a quaisquer requisições que são feitas na porta 80, a porta padrão HTTP.

Em primeiro lugar, precisamos alterar a diretiva ServerAdmin para um e-mail que o administrador do site possa receber e-mails por ele.

ServerAdmin admin@example.com

Depois disso, precisamos adicionar duas diretivas. A primeira, chamada ServerName, estabelece o domínio de base que deve corresponder à esta definição de virtual host. Este provavelmente será o seu domínio. A segunda, chamada ServerAlias, define outros nomes que devem corresponder como se fossem o nome de base. Isto é útil para a correspondência de hosts que você definiu, como www:

ServerName example.com
ServerAlias www.example.com

A outra única coisa que precisamos mudar para o arquivo de virtual host básico é a localização do documento raiz para este domínio. Nós já criamos o diretório que precisamos, então precisamos apenas alterar a diretiva DocumentRoot para refletir o diretório que criamos:

DocumentRoot /var/www/example.com/public_html

No total, nosso arquivo de virtualhost deve ficar assim:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Salve e feche o arquivo.

###Copie o primeiro Virtual Host e personalize-o para o Segundo Domínio

Agora que temos nosso primeiro arquivo de virtual host criado, podemos criar nosso segundo copiando esse arquivo e ajustando-o conforme necessário.

Comece copiando-o:

sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

Abra o novo arquivo com privilégios de root em seu editor:

sudo nano /etc/apache2/sites-available/test.com.conf

Agora você precisa modificar todas as informações pertinentes para referenciar seu segundo domínio. Quando terminar, ele será algo parecido com isto:

<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Salve e feche o arquivo quando terminar.

#Passo Cinco - Ative os novos arquivos de Virtual Host

Agora que criamos nossos arquivos de virtual host, devemos ativá-los. O Apache inclui algumas ferramentas que nos permitem fazer isto.

Podemos utilizar a ferramenta a2ensite para ativar cada um de nossos sites assim:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Quando terminar, você precisará reiniciar o Apache para fazer com que estas alterações tenham efeito:

sudo service apache2 restart

Você provavelmente irá receber uma mensagem dizendo algo como:

* Restarting web server apache2
 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

Esta é uma mensagem inofensiva que não afeta o nosso site.

#Passo Seis - Configure o arquivo de hosts local (Opcional)

Se você não usou os nomes de domínio reais que você possui para testar este procedimento e tem usado alguns exemplos de domínios em vez disso, você pode testar ao menos a funcionalidade desse processo modificando temporariamente o arquivo hosts em seu computador local.

Isto irá interceptar todas as requisições para os domínios que você configurou e os apontará para o seu servidor VPS, da mesma forma que o DNS faria se você estivesse utilizando domínios registrados. Isto irá funcionar somente em seu computador, e é útil simplesmente para propósitos de testes.

Certifique-se de que você está operando em seu computador local para estas etapas e não no seu servidor VPS. Você precisará da senha administrativa do computador ou de outra forma, ser membro do grupo administrativo.

Se você está em um computador Mac ou Linux, edite seu arquivo local com privilégios administrativos digitando:

sudo nano /etc/hosts

Se você estiver em uma máquina Windows, você poderá encontrar instruções para alteração do seu arquivo hosts aqui.

Os detalhes que você precisa adicionar são o endereço IP público do seu servidor VPS seguido pelo domínio que você quer usar para alcançar esse VPS.

Para os domínios que eu utilizei neste guia, assumindo que o endereço IP do meu servidor VPS é 111.111.111.111, eu poderia adicionar as seguintes linhas no final do meu arquivos hosts:

127.0.0.1   localhost
127.0.1.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

Isso irá direcionar todas as requisições para example.com e test.com em nosso computador e enviá-las para nosso servidor em 111.111.111.111. Isso é o que queremos se não somos os proprietários desses domínios, de forma a testar nossos virtual hosts.

Salve e feche o arquivo.

#Passo Sete - Teste seus resultados

Agora que você tem seus virtual hosts configurados, você pode testar sua configuração facilmente indo para os domínios que você configurou em seu navegador web:

http://example.com

Você deve ver uma página parecida com esta:

#Success! The example.com virtual host is working!

Da mesma forma, você puder visitar sua segunda página:

http://test.com

Você verá o arquivo que você criou para seu segundo site:

#Success! The test.com virtual host is working!

Se ambos os sites funcionaram bem, você configurou com sucesso dois virtual hosts no mesmo servidor.

Se você ajustou o arquivo hosts do seu computador doméstico, você pode querer apagar as linhas que você adicionou, agora que você verificou que a sua configuração funciona. Isto irá evitar que seu arquivo hosts fique cheio de entradas que não são realmente necessárias.

Se você precisar acessá-los por longo tempo, considere a compra do nome de domínio para cada site que precisar e configure-os para apontar para seu servidor VPS.

#Conclusão

Se você acompanhou, você deve ter um único servidor tratando dois nomes de domínios separados. Você pode expandir este processo seguindo os passos que traçamos acima para fazer virtual hosts adicionais.

Não há nenhum limite de software no número de domínios que o Apache pode tratar, então sinta-se livre para fazer tantos quanto o seu servidor for capaz de suportar.

Por Justin Ellingwood

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
8 Comments
Leave a comment...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

My apache’s installation give me the following: /var/www/html . I need do /var/www/html/mysite.com/public_html ?

I also need to know that!

That /var/www/html/ folder is for the default site that is on this conf file 000-default.conf You can put your mysite.com wherever you want(You will define the path for it on the DocumentRoot), the recommendation here is /var/www/mysite.com and the your public content should go on /var/www/mysite.com/public_html

And if I wish to put the www files in different path, like /home/username/www ? For example: Domain name: myfirsttest.com Root Path: /home/myfirsttest/www

Domain name: mysecondtest.com Root Path: /home/secondtest/www

How can I procceed? Thank you.

Hi guys. I followed the tutorial and everything is OK. However, only the url “http://munizrb.com.br/” is working. When I try to access via url “http://www.munizrb.com.br/” get ERROR “Error Code: DNS_PROBE_FINISHED_NXDOMAIN”.

How can I fix?

Thank you very much!

Só tenho uma dúvida, eu preciso adicionar os dominios na pate de DNS do digital ocean e direcionar ao meu VPS. lá em DNS> Add a Domain> onde escolho o VPS e adiciono ao IP?

Sim, você precisa adicionar a entrada A apontando para o IP do seu servidor.

Olá, estou com um problema, segui o tutorial passo-a-passo. Quando enviei minha aplicação para o droplet tudo funciona perfeitamente, porém quando realizo o upload de uma imagem para o servidor a imagem não pode ser acessada pela URL, da erro 500.

Segue link da imagem: http://cdn.madeapp.net/attachment/FRX48XMO/675e40599bdbb68584dc29e86ee4d867_captura-de-tela-(2).png

O subdomínio CDN possui chmod 777.

A única alteração que fiz no tutorial foi na alteração do grupo das pastas, que ao invés de utilizar $USER:$USER eu utilizei www-data:www-data.

Alguém tem alguma ideia do que possa estar acontecendo?

Att

Oi amigo, eu contratei ontem estava meio perdido e achei esse tutorial no youtube que ensina desde o começo, pode ser que te ajude. https://www.youtube.com/watch?v=wImshP8eOsM eu segui ele

Olá @iphe, pois é eu já havia visto este tutorial. Porém acredito que tenha sido propagação de DNS, pois agora eu consigo acessar esta URL da imagem haha

Se puder acessar ela pra mim e me informar se consegue acessar eu lhe agradeceria!

Vlw pela atenção.

OI @ThiagoLimah então sua url abre aqui normal, desde mexico… hahaha… é que moro no mexico, então eu segui o video e depois vi este tuto e segui aqui tive problema com tive problemas no passo 5 depois de ativar não funcionava mas depois de ver em outro tutorial aqui mesmo que tem que desativar o 000-default.conf, e feito isso ja deu tudo certo. =)

Obrigado @iphe =D

Aqui também está abrindo :)

Obrigado =)

Oi @ThiagoLimah estou com um problema aqui não sei se vc teve tb. na instalacao do magento me da esse erro PHP Extensions “pdo_mysql” must be loaded. ja instalei pdo_mysql e add em php.ini

extension=pdo_mysql.so extension=pdo_mysqli.so extension=pdo.so

e nada… continua o erro =(

Tenta: sudo apt-get install php5_mcrypt sudo service apache2 restart

Vê se funciona

Isso ja fiz, eu tinha problema com o php5_mcrypt tb e tive que instalar e add no php.ini extension=mcrypt.so e ja nao tenho mais problemas mas agora o pdomysql. e na net tudo que achei ja fiz hahaha… e nada

Você está alterando o php.ini correto? Caso queira confirmar usa o phpinfo(); Olha esse link: http://freemagento.blogspot.com.br/2012/10/magento-installation-pdomysql-mcrypt.html

eu ja fiz isso do tutorial do link hahaha… mas obrigado

É estranho, pois minha aplicação utilização PDO com o módulo do MySQL e funcionou normalmente! =/

Oi! Você instalou o pacote **php5-mysql ** no servidor ? Deveria funcionar já de cara, sem nem precisar editar manualmente o php.ini . Também precisa reiniciar o Apache após instalar esse pacote.

Oi @erikaheidi sim instalei e ja esta tudo bem, o problema que estou agora é com o magento no painel admin dele esta aparecendo esta msg

Your web server is configured incorrectly. As a result, configuration files with sensitive information are accessible from the outside. Please contact your hosting provider.

Procurei no google dizem que é por permissões das pastas e mudei e nada. =( se vc souber que pode ser. Obrigado pela ajuda

Oi @ThiagoLimah as permissoes eu ja tinha mudado, mais o AllowOverride para All nao… como faço? eu add <Directory “/var/www/html/app/etc”> Options FollowSymLinks AllowOverride All </Directory>

no arquivo .htaccess que esta no diretorio app, var e media ou só no media? e depois mudo a permissão do local.xml para 600?

Obrigado pela ajuda

@iphe você está usando Ubuntu, certo?

acessa o arquivo: sudo vim /etc/apache2/apache2.conf

Procura as linhas:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

E altera para:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Depois disso você reinicia o apache. sudo service apache2 restart

@ThiagoLimah
Deu certo aqui muito obrigado pela ajuda =)

Maravilha @iphe =)

OI @ThiagoLimah eu de novo hahahahahaha… quando entro na pagina de “magento connect (downloader)” e tento instalar alguma coisa, a baixo no console contents corre a instalação ate metade, para e escreve “Check permissions” isso dentro do console e debaixo do console escreve “Please check the output frame for errors and refresh the page to retry changes.” vc sabe o que pode ser? ja tentei mudar as permissoes e nada. vi na internet que pode ser por ter um php mais atual.

Você está mudando as permissões das pastas através do comando chmod?

Já tentou alterar o grupo das pastas? sudo chown -R www-data:www-data /var/www/html

@ThiagoLimah Sim eu uso o terminal pra mudar as permissoes com chmod, os grupos tb .

Uhm, infelizmente nunca utilizei o Magento. Agora realmente não sei o que pode ser =/

@ThiagoLimah então o que vi aqui que o magento esta perfeito, so que quando instalo alguma extensão nele da o problema, eu li que pode ser o php que esta em 5.5.9 e a extensão não é compatível então da problema. vou ver se faço um downgrade do php pro 5.4 pode ser que seja isso mesmo… Obrigado por toda a ajuda que não foi pouca.

Oi @erikaheidi, nao, isso não fiz… vou ver o tutorial… muito obrigado. =)

Oi @erikaheidi ja instalei swap, parece que meu site ficou ate um pouco mas rápido, obrigado pela dica =)

Quando entro no terminal com ssh me vem uma msg assim: Could not load list of meta packages: [Errno 12] Cannot allocate memory vc sabe como posso resolver isso? obrigado

Obrigado, já realizei o processo 2 vezes com o seu post… Abraços.

Seguindo o exemplo dos domínios example.com e test.com, é necessário adiciona-los em Networking >> Domains ?

https://assets.nyc3.digitaloceanspaces.com/site/control-panel/networking/domains/no-domains-yet.png

Ficar atento aos textos em vermelho para alterar, passei despercebido, mas depois voltei, corrigi e funcionou perfeitamente Ubuntu 16.04.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.