Eu escrevi um proxy dns no Python. Ele lerá entradas curinga em / etc / hosts. Veja aqui: link
Eu preciso testar subdomínios no meu host local. Como posso efetivamente ter esse resultado de adicionar *.localhost.com
ao meu arquivo /etc/hosts/
?
Se não for possível, como resolvo esse problema? Eu preciso testar sub-domínios curinga no meu servidor local. É um devserver do Django, o servidor do Django dev pode manipular os subdomínios? Alguma outra peça de software / roteamento pode me dar o resultado final que eu quero?
Eu escrevi um proxy dns no Python. Ele lerá entradas curinga em / etc / hosts. Veja aqui: link
Instale dnsmasq (eu faço isso em todos os meus desktops Linux como um cache de DNS de qualquer maneira). Em dnsmasq.conf
adicione a linha:
address=/localhost.com/127.0.0.1
Não é possível especificar curingas no arquivo /etc/hosts
. Especifique os nomes de host necessários de forma explícita ou alternativa, configure um servidor de nomes local com as regras apropriadas.
Eu pessoalmente gosto de criar um arquivo PAC para isso e fazer meu navegador apenas usá-lo.
Etapa 1: crie um arquivo, por exemplo: *.proxy.pac*
em algum lugar (eu uso minha pasta $home
)
Etapa 2: cole este código (o exemplo é com a porta 8000):
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*localhost")) {
return "PROXY localhost:8000";
}
return "DIRECT";
}
Etapa 3 : Faça seu navegador usar esse arquivo PAC.
Vídeo do YouTube para PAC & Firefox
Etapa 4 :
Agora você pode testar seu aplicativo acessando: http://mysubdomain.localhost/
Passo 5: Aproveite:)
Você não pode usar um curinga em /etc/hosts
.
Dê uma olhada aqui para um bom passo a passo sobre como realizar no OS X usando o BIND, o construído -no servidor DNS inativo, e Apache.
Eu arrumei um antigo projeto meu:
requisitos:
Vantagens sobre o uso do dnsmasq ou do proxy dns do python:
Esta solução baseada em DNS funcionou perfeitamente no meu caso, sem a necessidade de instalar nada: link (Mac OSX 10.9)
Resposta curta:
Seu arquivo / etc / hosts / não permitirá que você use curingas ou números de porta. Você precisará criar uma entrada para cada um dos seus subdomínios
A resposta curta é que você não. A resposta mais longa é que você precisa ser mais claro sobre o que você deseja realmente alcançar, porque talvez exista uma maneira melhor e uma maneira diferente de alcançá-la.
Para hospedagem na web (eu nunca vi isso usado de outra forma) é feito no DNS em combinação com um servidor web virtual de hospedagem consciente. Para obter mais informações sobre registros DNS de curingas (Wikipedia), e um artigo Wildcard hosting with Apache and Bind para Linux usando bind e Apache.
Na pior das hipóteses, você poderia usar um servidor DNS local, suponho.
Se você quiser usar dnsmasq
com NetworkManager
, você pode (ou mesmo deve?) começar dnsmasq
de NetworkManager
adicionando
dns=dnsmasq
para /etc/NetworkManager/NetworkManager.conf
. Em seguida, a configuração do dnsmasq vai para /etc/NetworkManager/dnsmasq.conf
ou /etc/NetworkManager/dnsmasq.d/
resp.
Uma tarefa comum para este assunto é mapear diretórios para subdomínios. Uma maneira muito simples para isso é anexar as entradas baseadas em diretório automaticamente ao arquivo de hosts:
#!/usr/bin/python import os hostsFile = open("/etc/hosts", "a+"); lines = hostsFile.readlines() for fileName in os.listdir('/opt/subdomainDirs'): entryExists = False for line in lines: if fileName in line: entryExists = True if not entryExists: hostsFile.write("127.0.0.1 " + fileName + ".localhost\n");
Obrigado tschundeee pelo que eu considero ser a resposta definitiva para esta questão, gostaria de poder comentar, mas aqui está a configuração total para aqueles que tentam realizar o objetivo original (curingas apontando para a mesma base de código - não instalando nada, ambiente dev ou seja, XAMPP)
arquivo: / etc / hosts (não-windows)
127.0.0.1 example.local
arquivo: /XAMPP/etc/httpd.conf
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
: XAMPP / etc / extra / httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/path_to_XAMPP/htdocs"
ServerName example.local
ServerAlias *.example.local
# SetEnv APP_ENVIRONMENT development
# ErrorLog "logs/example.local-error_log"
# CustomLog "logs/example.local-access_log" common
</VirtualHost>
reinicie o apache
salve como whatever.pac onde quiser e, em seguida, carregue o arquivo na rede do navegador > proxy > auto_configuration settings (recarregue se você alterar isso)
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
O dnsmasq funcionou para mim, exceto que eu tive que dar alguns passos adicionais.
Aqui está o procedimento completo:
Prefira /etc/resolv.conf
com a seguinte linha
nameserver 127.0.0.1
Adicione as seguintes linhas a /etc/dnsmasq.conf
listen-address=127.0.0.1
address=/localhost.localdomain/127.0.0.1
address=/localhost/127.0.0.1
Reinicie o dnsmasq