1

Я настраиваю сервер (Ubuntu Server 18.04) под управлением Apache2 для своих личных нужд тестирования и разработки. Я могу получить к нему доступ только через локальный IP-адрес (например, http://10.0.0.125) или через его имя в локальной сети (например, 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 это тоже не тривиально).

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

2 ответа2

1

ссылка типа <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».)

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .