Atualmente estou hospedando meu próprio servidor (ubuntu) com os seguintes serviços: samba, ftp e um servidor web. Comprei um domínio e vinculei o registro A do DNS ao IP do meu ISP. Isso está funcionando corretamente. Agora gostaria de usar o registro curinga DNS para criar subdomínios. Quero evitar esperar 24 horas antes que a alteração do DNS seja concluída.
Até agora só consigo redirecionartodoscuringas recebidos no mesmo diretório:
test1.domain.com redireciona para /var/www
test2.domain.com redireciona para /var/www
Embora eu gostaria de obter:
test1.domain.com redireciona para /var/www/test1
test2.domain.com redireciona para /var/www/test2
Meu palpite seria alterar o arquivo /etc/apache2/sites-available/domain.
Qualquer ajuda ou dicas serão bem-vindas!
Obrigado,
Marca
EDITAR:
Esta é a aparência do meu arquivo /etc/apache2/sites-available/domain:
<VirtualHost *:80>
ServerAdmin webmaster@domain
DocumentRoot /var/www/webroot
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/webroot>
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>
Responder1
Você deve conseguir o comportamento desejado com VirtualDocumentRoot
.
Dentro do seu <VirtualHost>
, adicione um ServerAlias
para capturar todos os domínios nos quais você está interessado:
ServerAlias *.example.com
... então mapeie-os para os diretórios desejados. Remova o seu DocumentRoot
e, em seu lugar, adicione:
VirtualDocumentRoot /var/www/%1
Você vai querer ter um <Directory /var/www/>
bloco permitindo acesso e ter em mente que este vhost só deve lidar com serviços para seus vhosts configurados dinamicamente - se você quiser example.com
e www.example.com
for tratado separadamente, então você vai querer que eles tenham seus próprios arquivos <VirtualHost>
.
Editar:
Você desejará usar um vhost diferente para lidar com os domínios "base". Com base na configuração atual no comentário:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName catchall.example.com
ServerAlias *.example.com
# NOTE: this config will map test1.example.com to /var/www/test1
VirtualDocumentRoot /var/www/%1
# If you want that to map instead to /var/www/test1.example.com, then use %0:
# VirtualDocumentRoot /var/www/%0
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Order Allow,Deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# This next vhost should be in a different file in sites-available to
# fit with debian-style vhosts - but make sure it's alphabetically
# after the file that contains the first vhost - we want it to load first
# so that it's default. It can also just go in the same file.
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/www.example.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Order Allow,Deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Responder2
Obrigado por ajudar a encontrar a resposta. Aqui encontrei a solução para o meu problema, acho que isso ajudará outros iniciantes como eu a encontrar uma solução para o problema mencionado acima.
passo 1: configure seu site conforme indicado abaixo
vi /etc/apache2/sites-available/yoursite
<VirtualHost *:80> ServerAlias localhost *.yoursite #wildcard catch all VirtualDocumentRoot /path/to/your/workspace/%1/public UseCanonicalName Off <Directory "path/to/your/workspace"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
2)sudo a2ensite /etc/apache2/sites-available/seusite
3) serviço sudo apache2 recarregar
4)Instale o Dnsmasq: sudo apt-get install dnsmasq
5) abra /etc/NetworkManager/NetworkManager.conf e comente a linha que diz dns=dnsmasq. Reinicie o NetworkManager depois: sudo restart network-manager.
6)vi /etc/dnsmasq.conf e a linha listen-address=127.0.0.1.
7) Crie um novo arquivo em /etc/dnsmasq.d e abra o arquivo e edite-o como segue
address=/yourdomain/127.0.0.1
8) Reinicie o Dnsmasq: sudo /etc/init.d/dnsmasq restart.
Isso também pode ser feito no nginx. e observe que esta solução funcionou para mim. Acho que isso funcionará para todos os outros também.