Como configuro hosts virtuais baseados em nomes usando o Ubuntu 12.04?

7

Como faço para configurar hosts virtuais baseados em nomes usando o Ubuntu 12.04?

Eu segui as instruções dadas no link .

Eu fiz o seguinte ...

  1. cp default newsite
  2. substitua “/ var / www” por “/ var / www / newsite” no novo site
  3. adicione “ServerName newsite.example.com” ao newsite

Após algumas pesquisas, encontrei uma entrada de blog que dizia que eu precisava desativar o site padrão usando a2dissite default . Depois que fiz isso, funcionou. Isso está correto? Isso nunca é mencionado no guia do servidor Ubuntu. O guia também inclui esta linha ...

  

“O host virtual padrão não tem nenhuma diretiva ServerName especificada, por isso   responderá a todas as solicitações que não corresponderem a uma diretiva ServerName   em outro host virtual. ”

O que parece implicar que o site padrão e outros podem coexistir.

Estou executando uma nova instalação do 12.04 Server e recarreguei a configuração do apache toda vez que fiz um ajuste.

Em resumo ... depois de adicionar um novo arquivo em / etc / apache2 / sites-available (uma cópia alterada do arquivo "padrão" com a diretiva ServerName adicionada) e o link correspondente em / etc / apache2 / sites-enabled, é necessário desabilitar ou renomear o link simbólico do site para que o novo site funcione? A documentação e uma resposta dada abaixo parecem inferir que não é necessário fazê-lo, mas em caso afirmativo, o que fiz de errado? Usando a configuração abaixo, ao tentar acessar newsite.example.com, recebo o site padrão.

/ etc / apache2 / sites-available $ cat default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/ etc / apache2 / sites-disponíveis $ cat newsite

<VirtualHost *:80>

        DocumentRoot /var/www/newsite
        ServerName newsite.example.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/newsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

/ etc / apache2 / sites-enabled # ls -l

root@sandbox:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 26 Mar 18 09:56 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 26 Mar  7 13:36 newsite -> ../sites-available/newsite
    
por Corey 08.03.2013 / 01:01

6 respostas

5

Esta é mais uma questão de configuração do apache do que uma do Ubuntu.

Sim, você pode executar vários servidores virtuais em um host, cada um oferecendo conteúdo separado, desde que todos mapeiem (por exemplo, via DNS) para o mesmo servidor.

A documentação oficial sobre como criar servidores virtuais (versão 2.2, mas esse recurso não mudou fundamentalmente entre as versões) pode ser encontrada aqui:

  

link

A resposta curta é que você precisa:

  • defina seus hosts virtuais
  • inclua algum mapeamento entre seus nomes de host e o conteúdo que eles veiculam

Isso é feito adicionando uma cláusula de host virtual a algum arquivo de configuração do apache, por exemplo. em / etc / apache2 / sites-available / 000-add-my-virtual-hosts (nome projetado especificamente para preceder o nome 000-default em ordem alfabética)

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName hostname1.mydomain.com
    DocumentRoot /home/www/hostname1
</VirtualHost>

<VirtualHost *:80>
    ServerName hostname2.mydomain.com
    DocumentRoot /home/www/hostname2
</VirtualHost>

Note que você pode também precisa adicionar links de / etc / apache2 / sites-enabled / para / etc / apache2 / sites-available se o site que você precisa já está no último mas não no primeiro.

EDIT 1:
 Depois de ler a página man do a2dissite , fica claro que tudo o que ele faz é remover o link simbólico de / etc / apache2 / sites-enabled / .  A chave é entender que a ordem na qual essas configurações são processadas pode afetar o resultado final. O site padrão é chamado 000-default para ser carregado primeiro. Se corresponder a todos os sites, ou seja, funcionar como um curinga "qualquer outra coisa", você não verá os outros. Tente renomear o link para ter um número maior, como 999-default , para que ele seja carregado por último (após os outros sites serem correspondidos).

EDIT 2: Para sua pergunta atualizada: sim, é necessário renomear ou excluir o site padrão porque seu nome de arquivo de configuração começa com '000', fazendo com que seja carregado primeiro e 'take-over' devido à correspondência com caracteres curinga. Eu suponho que a documentação pode ser melhorada neste ponto.

EDIT 3: A ordem em que os nomes dos servidores aparecem, sua importância e muito mais estão documentados em esta página do apache no seção vhost baseado em nome Uma das frases relevantes diz:

The first vhost on this list (the first vhost in the config file with the
specified IP address) has the highest priority and catches any request to
an unknown server name or a request without a Host: header field.

e mais tarde em Observações :

... the ordering of name-based vhosts for a specific address set is significant.
The one name-based vhosts that comes first in the configuration file has the
highest priority for its corresponding address set.
    
por arielf 10.03.2013 / 23:33
2

Usando o Ubuntu para hospedar o Apache na definição vhost no caso de sistemas baseados em Debian, a definição de sites é feita em

/etc/apache2/sites-enabled/*.conf

onde * conf corresponde a

internal1.conf internal2.conf internal3.conf internal4.conf

A definição de vhost de cada um desses sites será a seguinte

/etc/apache2/sites-enabled/internal1.example.conf

quando você diz

The default virtual host has no ServerName directive specified, so it will 
     

responder a todas as solicitações que não correspondem a um ServerName   diretiva em outro host virtual.

isso significa

Quando o apache exibe sites de vários vhosts, ele lê os nomes dos arquivos em ordem alfabética, motivo pelo qual o arquivo padrão que você mencionou tinha o número 000-default assim, nomear os hosts é realmente importante.

se uma requisição vier para algo. algo para seu servidor e ele ler arquivos vhosts em ordem alfabética     / etc / apache2 / sites-enabled /

e não encontra o arquivo de configuração necessário no diretório habilitado para sites
ele (apache2) servirá o primeiro arquivo vhost em ordem alfabética Portanto, uma boa dica é sempre usar um arquivo padrão 000 padrão em branco ou apontar para alguma página de erro como você deseja

Agora você pode ter a configuração a seguir para internal1.example.com

<virtualhost *:80>

    ServerAdmin webmaster@yoursite
    DocumentRoot /var/www/yoursite <--this is an important place should be there
    ServerName yourservername
    ServerAlias www.mydomain.com  <-- if you do not need this do not put it
    ErrorLog /var/logs/apache2/yoursite/error_log  <--logs can be customized 
    CustomLog /var/logs/apache2/yoursite/access_log common
</VirtualHost>

como no exemplo acima você pode fazer internal2.example.conf, internal3.example.conf e assim por diante você não precisa de outras linhas em tags, se você não precisar delas em sua configuração, pode ser que você possa dar uma olhada neste link link

    
por Registered User 15.03.2013 / 11:48
1

Eu não sei porque isso é muitas vezes encoberto, mas a palavra-chave importante no seu arquivo conf do site é "ServerAlias" aqui é um arquivo conf de exemplo com esse conjunto

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
    
por David 18.03.2013 / 02:19
1

Só para adicionar ao post do David, embora eu não esteja rodando o Ubuntu, eu estou rodando o Apache e notei que eu poderia chegar ao site usando o www.domain.com completo, mas quando eu o usei sem o www ele iria apenas use o primeiro site definido (que é o padrão). Observe que o DNS foi definido corretamente em que www é definido como @ (nome do host) para que estivesse correto.

Então, adicionando a diretiva ServerAlias, resolveu o problema. Ainda estou passando pela documentação para que possa haver outras maneiras de resolvê-lo também.

Meu arquivo de configuração era (em parte):

NomeDoServidor www.domain.com

Quando eu mudei para (adicionando a linha ServerAlias):

Nome_do_servidor domain.com ServerAlias www.domain.com

que resolveu o problema. Eu planejo testar as opções de configuração do David e usar apenas um * .domain.com para que coisas como ftp.domain.com ou smtp.domain.com funcionem.

    
por deandownsouth 16.08.2014 / 03:49
0

@Corey

Parece que você tem controle sobre os arquivos de configuração do apache. E você sabe onde procurar a documentação. Se bem entendi sua certeza sobre o uso do utilitário a2ensite. De acordo com as páginas man do a2ensite:

  

a2ensite é um script que ativa o site especificado (que contém   uma           bloco) dentro da configuração do apache2. Ele faz isso          criando links simbólicos em / etc / apache2 / sites-enabled. Da mesma forma, a2dis-          site desativa um site removendo esses links simbólicos. Não é um erro          habilitar um site que já esteja habilitado ou desabilitar um que esteja          já desativado

.

Qualquer ajuda que você precisar pode ser encontrada no site do Apache . É uma documentação muito concisa e seca, mas vale a pena seu tempo para se familiarizar

    
por noel 12.03.2013 / 05:39
0

Bem, eu tive esse problema e fiz o que outras respostas sugeriram, Meu caso é que eu quero executar vários projetos no meu ambiente de desenvolvimento e acessar cada um deles por um *.dev , conforme explicado aqui

Para complementar as respostas acima, o problema para mim foi que foo.dev estava interferindo em bar.dev e adicionando a seguinte parte resolveu

<VirtualHost foo.dev:80> #<---- you can filter the requests here
ServerName foo.dev
ServerAlias *.foo.dev
DocumentRoot /home/dev/foo
</VirtualHost>
    
por azerafati 08.12.2016 / 11:10

Tags