No meu arquivo / etc / hosts / no Linux / OSX, como faço para um subdomínio curinga?


170

Preciso testar subdomínios no meu host local. Como posso efetivamente obter esse resultado da adição *.localhost.comao meu /etc/hosts/arquivo?

Se não for possível, como faço para solucionar esse problema? Preciso testar subdomínios curinga no meu servidor local. É um servidor de desenvolvimento Django. O servidor de desenvolvimento Django pode lidar com os subdomínios? Outro software / roteamento pode me dar o resultado final que eu quero?


1
Pertence ao superusuário?
Paul R

Eu sei que as pessoas dizem que não é possível! Mas como faço de qualquer maneira! O que é algo fora do / etc / hosts / I pode ser usado para obter o efeito. Estou testando um servidor de desenvolvimento.
Miken


Como a maioria das respostas está focada na sua primeira pergunta (curingas do subdomínio localhost), responderei à sua pergunta secundária como um comentário: sim, o servidor de desenvolvimento Django é perfeitamente capaz de lidar com subdomínios localhost, basta convencer o navegador e o SO para enviar o tráfego do seu jeito (usando uma das várias soluções abaixo)!
precisa saber é o seguinte

Respostas:


44

Eu escrevi um proxy DNS em Python. Ele lerá entradas curinga em / etc / hosts. Veja aqui: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py


Isto é perfeito! Fui à procura de uma solução simples como este por um longo tempo (Trabalhando em OSX Mavericks BTW)
Billy Lua

2
agora, se pudéssemos apenas pip installele :)
metakermit

1
Instalei isso, fiz tudo e executei, mas não bloqueia sites.
DisplayName

Não é possível aprovar isso o suficiente. Eu precisava disso para sempre, me deparei com essa gema de perguntas e respostas, e sou um pouco hacker em Python, e esse é um boato interessante. Obrigado por compartilhar!
Farley

153

Instale o dnsmasq (eu faço isso em todos os meus desktops Linux como um cache DNS). Em dnsmasq.confadicionar a linha:

address=/localhost.com/127.0.0.1

7
Brilhante! Nota para usuários de Mac, é realmente simples assim: 1. sudo port install dnsmasq2. edit /opt/local/etc/dnsmasq.conf3.sudo port load dnsmasq
tomc 16/11/11

17
OSX com bebida: igual ao anterior, mas instalar bebida dnsmasq
Matt Humphrey

1
fyi brew> port (re @MattHumphrey sugestão)
electblake

1
Este exemplo não funciona para mim, possivelmente porque estou usando o vagrantup.com para veiculação local. Não se preocupe, eu já mudei o IP para o correto, 192.168.50.11mas o DNS não está resolvendo. Alguma idéia, este exemplo está correto para IP "non-127.0.0.1"?
Brian

6
Ótima dica. Para um desktop Ubuntu 14.04 (que executa o dnsmasq por padrão), crie um arquivo chamado /etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.confe coloque a linha address=/localhost.com/127.0.0.1nele, depois reinicie.
User38397 21/05

60

Não é possível especificar caracteres curinga no /etc/hostsarquivo. Especifique os nomes de host necessários explicitamente ou, alternativamente, configure um servidor de nomes local com as regras apropriadas.


15

Você precisa configurar um servidor DNS e ter cada cliente usá-lo para resolução. O próprio servidor pode ser algo "leve" como dnsmasq ou pesado como BIND .


+1 para dnsmasq, que é muito bem documentado e fácil de usar
David Schmitt

O dnsmasq não pode fazer isso.
DisplayName

Que parte do comportamento descrito na --address=seção da página do manual dnsmasq.conf não cobre o caso de uso descrito acima?
Gerald Combs

11

Fluxo de trabalho simples (não é necessário instalar nada)

Pessoalmente, gosto de criar um arquivo PAC para isso e fazer com que meu navegador apenas o use.

Etapa 1: criar um arquivo, por exemplo: *.proxy.pac*algures (eu uso minha $homepasta)

Etapa 2: cole este código (o exemplo está na 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 e Firefox

Etapa 4 : agora você pode testar seu aplicativo acessando:http://mysubdomain.localhost/

Etapa 5: aproveite :)


3
Talvez valha a pena mencionar que isso afetará apenas o seu navegador. Outros programas (como wget, não serão afetados por isso). Isso não é, por si só, um problema, mas talvez seja melhor mencionar isso.
Willem Van Onsem

Se você seguir a rota .pac e estiver implementando um servidor node.js., ficará surpreso ao ver que req.urlagora é uma URL absoluta. Isso é feito porque a suposição é que você deseja gravar um servidor proxy real, mas é surpreendente que você tenha usado essa técnica apenas como uma maneira de parar de adicionar entradas / etc / hosts para depuração. FYI para aqueles que podem seguir o mesmo caminho que eu.
Tom Boutell

5

Eu arrumei um projeto antigo meu:

https://github.com/airtonix/avahi-aliases

requisitos:

  • linux onde avahi e python-avahi são instaláveis
  • você está bem com domínios .local (o avahi não suporta nenhum outro tipo)

Vantagens sobre o uso do dnsmasq ou do proxy python dns:

  • outros usuários avahi / bonjour em sua rede local podem resolver os aliases que você cria e anuncia à rede (desde que você permita acesso à porta 5353)


3

Você não pode usar um curinga no /etc/hosts.

Veja aqui uma boa explicação sobre como realizar o OS X usando o BIND, o servidor DNS interno mas inativo, e o Apache.


5
O Apache não tem nada a ver com subdomínios.
Anônimo

3

Se você quiser usar dnsmasqcom NetworkManagervocê pode (ou deve mesmo?) Começam dnsmasqa partir NetworkManageradicionando

dns=dnsmasq

para /etc/NetworkManager/NetworkManager.conf. Então a configuração do dnsmasq vai para /etc/NetworkManager/dnsmasq.confou /etc/NetworkManager/dnsmasq.d/resp.


2

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 de seu subdomínio


2
O que permitiria especificar números de porta? Não é DNS AFAIK.
Pt

2

A resposta curta é que você não. A resposta mais longa é que você precisa ser mais claro sobre o que realmente deseja alcançar, porque talvez haja uma maneira melhor e uma maneira diferente de alcançá-la.

A hospedagem na web (nunca vi usada de outra forma) é feita no DNS em combinação com um servidor web com reconhecimento de hospedagem virtual. Para obter mais informações sobre registros DNS de caracteres curinga (Wikipedia), e um artigo Hospedagem de caracteres curinga com Apache e Bind for Linux usando bind e Apache.

Na pior das hipóteses, você poderia usar um servidor DNS local, suponho.


2

Uma tarefa comum para esse assunto é mapear diretórios para subdomínios. Uma maneira bem simples de fazer isso é anexar automaticamente as entradas baseadas em diretório no arquivo hosts:

#! / usr / bin / python

importação os

hostsFile = aberto ("/ etc / hosts", "a +");

lines = hostsFile.readlines ()

para fileName em os.listdir ('/ opt / subdomainDirs'):

    entryExists = False
    para linha em linha:
        se fileName na linha:
            entryExists = True  

    if not entryExists:
        hostsFile.write ("127.0.0.1" + nome do arquivo + ".localhost \ n");

2

Obrigado tschundeee pelo que considero ser a resposta definitiva para esse problema, gostaria de poder comentar, mas aqui está a configuração total para aqueles que tentam atingir o objetivo original (curingas todos apontando para a mesma base de código - não instale nada, ambiente de desenvolvimento ou seja, , XAMPP)

arquivo hosts (adicione uma entrada)

arquivo: / etc / hosts (não Windows)

127.0.0.1   example.local

configuração httpd.conf (ativar vhosts)

arquivo: /XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

Configuração httpd-vhosts.conf

arquivo: XAMPP / etc / extra / httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin admin@example.local
    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

crie um arquivo pac:

salve como o que quiser.pac onde quiser e carregue o arquivo na rede do navegador> proxy> configurações de configuração automática (recarregue se você alterar isso)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

2

O dnsmasq funcionou para mim, exceto que eu tive que fazer algumas etapas adicionais.

Aqui está o procedimento completo:

  1. Anexar /etc/resolv.confcom a seguinte linha

    nameserver 127.0.0.1
    
  2. Adicione as seguintes linhas ao /etc/dnsmasq.conf

    listen-address=127.0.0.1
    address=/localhost.localdomain/127.0.0.1
    address=/localhost/127.0.0.1
    
  3. Reinicie o dnsmasq


Isso não funcionará se sua distribuição usar o netplan (ubuntu 18.04, estou olhando para você)
MrMesees
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.