Como criar subdomínios em um host virtual baseado em nome?

27

Eu tenho hospedagem baseada em nome, vamos chamá-lo my.address.com. Meu amigo tem o endereço 'comum' address.come me deu uma máquina virtual que eu posso acessar via SSH.

Ele também fez um pouco de magia com as portas e agora, depois de instalar o Apache, eu poderia acessar /var/wwwatravés my.address.com.

Então, a pergunta é: como posso criar um subdomínio test.my.address.com?

Deve haver alguma mágica com a Diretiva Listen do Apache , mas não consigo descobrir. Além disso, sei criar sites disponíveis localmente com o Apache, mas não é o mesmo.

scythargon
fonte
Você não vai precisar Listen, olhar Apaches hosts virtuais: httpd.apache.org/docs/2.2/vhosts
Der Hochstapler
a principal questão permanece - o que escrever na diretiva ServerName?
scythargon

Respostas:

33

Para poder criar subdomínios, você precisará se certificar de várias coisas:

DNS

Para que outros possam alcançar test.my.address.com, primeiro precisam resolver esse nome para o endereço IP da sua máquina virtual. Como isso pode ser feito?

O que seu amigo provavelmente já fez foi criar um registro A na address.comzona, que aponta mypara o endereço IP da sua VM.

Por enquanto, tudo bem. Mas que tal test.my? Pode não ter uma entrada ainda.

Seu amigo pode simplesmente adicionar *.myà zona também (e apontar para o mesmo endereço IP). Todas as solicitações something.my.address.comserão enviadas para sua VM. Ótimo!

Hosts Virtuais Apache

Assim que sua VM for acessada, o Apache precisará saber como lidar com a solicitação. É aqui que usamos o recurso Hosts Virtuais do servidor HTTP Apache.

Eu normalmente corro no Debian, então vou explicar isso com um exemplo de configuração no /etc/apache2/sites-available. Vamos chamar um arquivo test.my.address.come preenchê-lo com informações.

<VirtualHost *:80>
        ServerName test.my.address.com
        ServerAdmin [email protected]

        DocumentRoot /var/www/test.my.address.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/test.my.address.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/test.my.address.com.error.log

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

        CustomLog ${APACHE_LOG_DIR}/test.my.address.com.access.log combined
</VirtualHost>

A configuração da chave dentro deste arquivo é a ServerNamediretiva . Isso informa ao Apache sob qual nome esse servidor deve estar disponível. Nomes adicionais podem ser fornecidos com a diretiva ServerAlias .

Caso você esteja usando o Debian também, não esqueça sudo a2ensite test.my.address.comdepois de criar o arquivo e sudo invoke-rc.d apache2 restart.

Der Hochstapler
fonte
Muito obrigado! :) Fiz minha parte e escrevi um e-mail a um amigo sobre a parte dele. Obrigado novamente :)
scythargon
@scythargon: O prazer é meu. Estamos aqui para ajudar :)
Der Hochstapler
Enquanto meu amigo não respondeu, você pode, por favor? O que eu pensava sobre como ele funciona: a requisição http test.my.address.comvai para my.address.come então meu servidor Apache na VM lida com isso. Mas você disse que o servidor DNS em address.com deveria saber test.myantes de tudo isso e independentemente do conhecimento my, por quê?
21812 scythargon #
@scythargon: para que qualquer solicitação HTTP chegue ao seu servidor, qualquer cliente primeiro precisa descobrir para qual servidor a solicitação deve ser enviada. Portanto, o nome do host deve ser válido. Caso contrário, eles serão informados "esse nome não existe".
Der Hochstapler