Назад | Перейти на главную страницу

Доступ к сайту без доменного имени через IP-адрес на сервере с несколькими виртуальными хостами

У меня есть одна капля Digital Ocean с 5 веб-сайтами, размещенными на ней через виртуальный хост. Все нормально работает. Их доменные имена указывают на каждого в отдельности. Используя Ubuntu 14.04 и Apache.

Я хочу добавить шестой «тестовый» сайт без указывающего на него доменного имени. Я хочу использовать его для тестирования некоторых вещей WordPress. Физическое расположение домашней страницы этого сайта:

/var/www/test_site/html/index.html

Скажем, IP-адрес моего сервера 198.51.100.55

Что мне нужно сделать, чтобы сделать эту домашнюю страницу доступной для всех в Интернете следующим образом?

http://198.51.100.55/test_site/html/index.html

Поместите следующие перед другие определения виртуального хоста в вашем файле конфигурации.

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.fakesite.com
DocumentRoot /var/www/test_site/html/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Затем перезагрузите Apache.

Резюме: вы не можете заставить его работать для всех, если не используете доменное имя. Но если вы просто лечите 198.51.100.55 как если бы это было еще одно доменное имя, оно будет работать для большинства пользователей - по крайней мере, в настоящее время.

Я рекомендую создать домен для вашего тестового сайта. Возможные варианты: приобретение нового домена, использование субдомена одного из ваших существующих доменов, использование бесплатного субдомена от одного из различных поставщиков таких доменов.


URL http://198.51.100.55/test_site/html/index.html никогда не будет доступен для всего Интернета.

Развертываются новые сети без IPv4. Чтобы позволить клиентам в таких сетях получить доступ только к ресурсам IPv4, используются такие методы, как DNS64 и NAT64. Если имя вашего сервера было test.example.com поток подключения для такого клиента может работать следующим образом:

  • Браузер отправляет запрос рекурсору DNS интернет-провайдера, запрашивая запись AAAA для test.example.com
  • Рекурсор DNS интернет-провайдера запрашивает у полномочного сервера example.com для записи AAAA для test.example.com
  • Авторитетный сервер отвечает, что такой записи не существует.
  • Рекурсор DNS интернет-провайдера возвращается к DNS64 и запрашивает у полномочного сервера example.com за рекорд А для test.example.com
  • Авторитетный сервер отвечает 198.51.100.55
  • Рекурсор DNS объединяет префикс одного из шлюзов NAT64 провайдера (назовем его 2001:db8:c481:4960:88df:da01::/96 и адрес IPv4. Результат 2001:db8:c481:4960:88df:da01:198.51.100.55 AKA 2001:db8:c481:4960:88df:da01:c633:6437.
  • Рекурсор DNS отправляет ответ браузеру, сообщая, что запись AAAA для test.example.com является 2001:db8:c481:4960:88df:da01:c633:6437.
  • Браузер отправляет SYN-пакет на NAT64 на 2001:db8:c481:4960:88df:da01:c633:6437.
  • NAT64 преобразует SYN-пакет из IPv6 в IPv4, удаляя первые 96 битов IP-адреса назначения и подставляя свой собственный IPv4-адрес в качестве источника.
  • Связь продолжается с NAT64, транслирующим каждый пакет в TCP-соединении.

Но как только вы пытаетесь сделать это с IP-адресом, а не с доменным именем, все выходит из строя. Браузер никогда не будет отправлять запросы DNS, поэтому он никогда не узнает, что 198.51.100.55 заменяется на 2001:db8:c481:4960:88df:da01:c633:6437. Вместо этого браузер попытается подключиться к 198.51.100.55, но у хоста нет маршрута IPv4, поэтому ядро ​​сообщит браузеру, что сервер недоступен.

Единственный способ сделать сайт доступным для пользователей в такой сети (не нарушая ничего другого) - это иметь доменное имя для вашего сайта.

Если вас устраивает то, что ваш сайт доступен только для большой части Интернета (которая со временем будет уменьшаться), вы можете просто лечить 198.51.100.55 в качестве еще одного доменного имени и соответствующим образом настройте виртуальный хост.

Это выглядело бы примерно так:

<VirtualHost 198.51.100.55:80>
    ServerName 198.51.100.55
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>