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

154

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?

    
por MikeN 02.03.2010 / 17:43

14 respostas

40

Eu escrevi um proxy dns no Python. Ele lerá entradas curinga em / etc / hosts. Veja aqui: link

    
por 02.05.2011 / 11:30
146

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
    
por 03.03.2010 / 03:37
53

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.

    
por 02.03.2010 / 17:46
14

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

    
por 02.03.2010 / 21:28
8

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

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:)

    
por 07.03.2016 / 14:11
3

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.

    
por 02.03.2010 / 17:47
3

Eu arrumei um antigo projeto meu:

link

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 dns do python:

  • outros usuários avahi / bonjour em sua rede local podem resolver os aliases que você cria e anuncia para a rede (desde que você esteja permitindo acesso à porta 5353)
por 16.04.2013 / 11:11
3

Esta solução baseada em DNS funcionou perfeitamente no meu caso, sem a necessidade de instalar nada: link (Mac OSX 10.9)

    
por 06.03.2012 / 23:02
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 dos seus subdomínios

    
por 02.03.2010 / 17:49
2

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.

    
por 02.03.2010 / 21:20
2

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.

    
por 13.02.2014 / 14:35
2

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");
    
por 24.04.2014 / 19:32
2

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 de hosts (adicionar uma entrada)

arquivo: / etc / hosts (não-windows)

127.0.0.1   example.local

link

arquivo: /XAMPP/etc/httpd.conf

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

link

Arquivo

: 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

criar arquivo pac:

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";
}
    
por 19.08.2014 / 21:50
2

O dnsmasq funcionou para mim, exceto que eu tive que dar alguns passos adicionais.

Aqui está o procedimento completo:

  1. Prefira /etc/resolv.conf com a seguinte linha

    nameserver 127.0.0.1
    
  2. 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
    
  3. Reinicie o dnsmasq

por 26.01.2014 / 05:22