Имитация «поддоменов» без реального домена (в частной сети)

345
S. T. Veje

Я настраиваю сервер (Ubuntu Server 18.04) под управлением Apache2 для своих личных нужд тестирования и разработки. Я могу получить к нему доступ только через его локальный IP (ex. http://10.0.0.125) Или через его имя в локальной сети (ex. http://jeeves), Но пока это нормально.

Я хотел создать несколько поддоменов на этом сервере, чтобы должным образом изолировать несвязанные сайты, но я не верю, что могу использовать реальные поддомены: http://sub.10.0.0.125не работает, так как IP не является доменом, следовательно, не может иметь поддомен, и http://sub.jeevesне работает, поскольку браузер интерпретируется .jeevesкак TLD, а не как имя сервера.

Поэтому я пришел к другому решению:

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

Теперь я могу создать каталог /var/www/subи получить к нему доступ через http://jeeves/~sub/.

Я подумал, что это очень хороший компромисс ... за исключением того, что это не поддомен, и он не работает как один, ссылка, на которую <a href="/foo/">будет ссылаться, http://jeeves/foo/а не как хотелось бы http://jeeves/~sub/foo/. Я мог бы разобраться с этим в коде каждого сайта, но это было бы далеко от идеала.

Мой вопрос: есть ли способ заставить Apache обрабатывать /~sub/часть URL как субдомен для всех намерений и целей (в частности, для ссылок)? Может быть, какая-то директива BaseDir? Я не мог найти его, но это не значит, что чего-то такого не существует.

Прежде чем вы это предложите: получение фактического домена для этого сервера немного выходит за рамки моих текущих потребностей; запуск выделенного DNS-сервера кажется слишком сложным; и изменение файла hosts в каждой системе не совсем масштабируемо (скажем, на iPhone это тоже не тривиально).

Я чувствую, что мое решение идеально подходит для моих нужд, если только оно может работать.

1
Вам нужно будет запустить выделенный DNS-сервер, если вы хотите иметь поддержку таких функций, как глобальные домены и субдомены. Если все локально, внесите изменения в хост-файл. LPChip 6 лет назад 1

2 ответа на вопрос

1
grawity

ссылка, как <a href="/foo/">будет ссылаться, http://jeeves/foo/а не как хотелось бы http://jeeves/~sub/foo/. […] Есть ли способ заставить Apache обрабатывать / ~ sub / часть URL-адреса как поддомен для всех намерений и целей (в частности, для ссылок)? Может быть, какая-то директива BaseDir?

Но не Apache заботится о разнице здесь. Относительные URL-адреса, например /foo/, разрешаются вашим веб-браузером, и веб-браузер не может быть настроен с помощью параметров Apache. Пока предоставленный URL-адрес - это путь, который начинается с /, веб-браузер всегда будет относиться к нему как к базе домена.

запуск выделенного DNS-сервера кажется слишком сложным

Вы, вероятно, опираясь на выделенный сервер DNS прямо сейчас для того, чтобы разрешить jeevesимя - и это, вероятно, работает внутри вашего домашнего маршрутизатора, а также полное имя, вероятно, jevees.lan.или, jeeves.home.или что - то подобное. (Клиентские устройства изучают суффикс через DHCP.)

Если вам повезет, маршрутизатор позволит вам добавить пользовательские статические имена хостов, такие как sub.lan., а если вам очень повезет, он может даже позволить вам добавить домены третьего уровня, такие какsub.jeeves.lan.

Если внутренний DNS-сервер маршрутизатора недостаточно гибок или локальное разрешение имен вообще не основано на DNS, то в большинстве случаев вам не повезло. Запустите свой собственный DNS.


Некоторые люди настраивают доменные имена, размещенные на «волшебных» DNS-серверах, которые переводят <anything>.x.y.z.t.<somedomain>в IP-адрес x.y.z.t. (Я не знаю, какие конкретные доменные имена существуют в настоящее время, но раньше был xip.io.)

Одна потенциальная проблема с этим обходным путем - а также с покупкой собственного домена - состоит в том, что большинство домашних маршрутизаторов просто блокируют ответы DNS, которые приходят извне, но разрешаются на «внутренний» IP-адрес. (Это называется «защита повторного связывания DNS».)

Чем больше я об этом думаю, тем более очевидно, что ты прав. Я надеялся, что, возможно, Apache может быть настроен на префикс каждого запроса с нужным «поддоменом», возможно, на основе реферера: если реферер начинается с `/ ~ sub /`, а запрос нет, то Apache будет перенаправлять на ` / ~ sub / [запрошенный URL] `. Во всяком случае, это была смутная мысль. S. T. Veje 6 лет назад 1
Возможно, вы могли бы сделать это с RewriteRule, но я вижу пути такого взлома из-за хрупкого реферера. Слышал ли я, что кто-то сказал «слишком много сложностей»? grawity 6 лет назад 0
Туш. Но с другой стороны, это личный сервер разработки, а не рабочий сервер, поэтому, если реферер не соответствует ожиданиям, это, вероятно, моя собственная чертова ошибка. S. T. Veje 6 лет назад 0
0
Kinnectus

Вам нужно будет запустить выделенный DNS-сервер, который сможет преобразовать запрошенное доменное имя обратно в ваш IP-адрес окна тестирования / разработки.

Я пробовал это раньше со смешанными результатами, используя локально установленное решение DNS на моем компьютере разработчика, и это было немного больно.

Я приобрел маршрутизатор бизнес-класса с NAT-отражением и возможностью выступать в качестве DNS-сервера, который позволял мне вводить доменные имена разработчиков и указывать их на IP-адрес устройства. Затем я настроил виртуальных хостов Apache, как это обычно делается, и я могу использовать доменные имена как TLD, так и sub.TLD.

Как сказал grawity, запустите свой собственный DNS. Это спасатель для веб-разработчика.

Существуют ли не-программные решения DNS? grawity 6 лет назад 0
Я редактировал, чтобы уточнить (надеюсь), что я имею в виду. Я имею в виду, что я нашел программное обеспечение на базе Windows, которое предоставило DNS-сервер на моем компьютере разработчика. Это оказалось довольно мусором, и поэтому я использовал маршрутизатор бизнес-класса, который обладает функциональностью, и я просто добавляю домены, которые мне нужны, и указываю обратно на мой блок разработки. Работает значительно лучше. Kinnectus 6 лет назад 0
Думаю, тогда вы могли бы назвать маршрутизаторы «аппаратным решением», но я несколько удивлен тем, что оно действительно работает хорошо, учитывая, что большинство производителей рассматривают его как третичную функцию _at best._ (В конце концов, это действительно не имеет ничего общего с маршрутизацией. ) Большинство доменов размещены на обычном программном обеспечении ПК, будь то PowerDNS, BIND или Windows DNS Service ... grawity 6 лет назад 0
Я думаю, это зависит от того, насколько сложным нужно, чтобы их решение DNS было ... небольшая локальная сеть могла бы использовать свой маршрутизатор, выделенный блок DNS (как вы говорите, ПК или, скажем, RPi) или свой бизнес-сервер, если это то, что они выберите ... суть в том, что я лично нашел, что DNS управляется вне коробки разработчика гораздо проще, чем пытаться заставить все работать должным образом на машине разработчика. Благодаря выделенной коробке в моей локальной сети, я также могу позволить себе легко тестировать свои творения на других устройствах локальной сети, таких как смартфоны и т. Д., С нулевыми изменениями конфигурации на самих устройствах. Kinnectus 6 лет назад 0