Simulando “subdomínios” sem um domínio real (em uma rede privada)

1

Estou configurando um servidor (Ubuntu Server 18.04) executando o Apache2 para minhas necessidades pessoais de teste e desenvolvimento. Eu só posso acessá-lo através de seu IP local (ex. http://10.0.0.125 ) ou seu nome na rede local (ex. http://jeeves ), mas tudo bem por enquanto.

Eu queria criar vários subdomínios neste servidor para manter sites não relacionados isolados, mas não acredito que eu possa usar subdomínios reais: http://sub.10.0.0.125 não funciona, já que um IP não é um domínio, por isso pode ' t tem um subdomínio e http://sub.jeeves não funciona, pois o navegador interpreta .jeeves como um TLD e não como o nome do servidor.

Então eu criei outra solução:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
    AliasMatch "^/~(.*)" "/var/www/$1"
</VirtualHost>

Agora posso criar um diretório /var/www/sub e acessá-lo via http://jeeves/~sub/ .

Um compromisso muito bom, pensei ... exceto que, como não é um subdomínio e não funciona como um, um link como <a href="/foo/"> se referirá a http://jeeves/foo/ e não como desejado a http://jeeves/~sub/foo/ . Eu poderia lidar com isso no código de cada site, mas isso estaria longe de ser ideal.

Minha pergunta: Existe alguma maneira de fazer com que o Apache trate a /~sub/ parte da URL como um subdomínio para todos os efeitos (links em particular)? Algum tipo de diretiva BaseDir, talvez? Não consegui encontrar um, mas isso não significa que algo parecido não exista.

Antes de sugerir: Obter um domínio real para esse servidor está um pouco além do escopo de minhas necessidades atuais; a execução de um servidor DNS dedicado parece muita complexidade adicional; e alterar o arquivo hosts em cada sistema não é exatamente escalonável (também não trivial em um iPhone, digamos).

Eu sinto que a minha solução seria ideal para as minhas necessidades, se apenas pudesse funcionar.

    
por S. T. Veje 02.10.2018 / 14:29

2 respostas

1

a link like <a href="/foo/"> will refer to http://jeeves/foo/ and not as desired to http://jeeves/~sub/foo/. […] Is there any way to make Apache treat the /~sub/ part of the URL like a subdomain for all intents and purposes (links in particular)? Some kind of BaseDir directive, maybe?

Mas não é o Apache que se importa com a diferença aqui. URLs relativos como /foo/ são resolvidos pelo seu navegador, e o navegador da web não pode ser configurado pelas configurações do Apache. Desde que o URL fornecido seja um caminho que comece com / , o navegador da Web sempre o tratará como relativo à base de domínio.

running a dedicated DNS server seems like too much added complexity

Você provavelmente está confiando em um servidor DNS dedicado agora para resolver o jeeves name - e provavelmente ele está sendo executado dentro de seu roteador doméstico, e o nome completo provavelmente é jevees.lan. ou jeeves.home. ou algo parecido. (Dispositivos cliente aprendem o sufixo via DHCP.)

Se tiver sorte, o roteador permitirá que você adicione nomes de host estáticos personalizados, como sub.lan. , e se tiver sorte muito , pode até mesmo permitir que você adicione domínios de terceiro nível, como sub.jeeves.lan.

Se o servidor DNS interno do roteador não for flexível o suficiente, ou se a resolução de nomes local não for baseada em DNS, você estará sem sorte. Execute seu próprio DNS.

Algumas pessoas configuraram nomes de domínio hospedados em servidores DNS 'mágicos', que convertem <anything>.x.y.z.t.<somedomain> no endereço IP x.y.z.t . (Eu não sei o que nomes de domínio específicos existem atualmente, mas xip.io costumava ser uma coisa.)

Um possível problema com essa solução alternativa - assim como com a compra de seu próprio domínio - é que a maioria dos roteadores domésticos simplesmente bloqueia as respostas do DNS que vêm de fora, mas resolvem um endereço IP "interno". (Isso é chamado de "proteção de religação de DNS").

    
por 02.10.2018 / 15:17
0

Você precisará executar um servidor DNS dedicado que possa traduzir seu nome de domínio solicitado de volta para seu endereço IP de teste / dev caixa.

Eu já tentei isso antes com resultados mistos usando uma solução de DNS instalada localmente em minha caixa dev e foi um pouco trabalhoso.

Eu comprei um roteador de nível corporativo que tem reflexo NAT e a capacidade de atuar como um servidor DNS, o que me permitiu inserir meus nomes de domínio de desenvolvimento e apontá-los para o meu IP de caixa de desenvolvimento. Eu, então, configurei o Apache virtualhosts como normalmente faria, e posso usar os nomes de domínio TLD e sub.TLD.

Como o Grawity disse, administre seu próprio DNS. É um salva-vidas para um desenvolvedor da Web.

    
por 02.10.2018 / 15:19