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

Могу ли я направить пользователей на виртуальный хост на сервере по основному IP-адресу сервера, если их DNS не может разрешить имя хоста?

Проблема: некоторые индивидуальные интернет-провайдеры иногда не могут разрешить один из моих виртуальных хостов при установке LAMP. Ubuntu 10.04 LTS, Apache 2. Я ищу хак, который может делать это по IP.

Предыстория: На этой машине есть несколько виртуальных хостов:

  • default.example.com
  • subdomain1.example.com
  • subdomain2.example.com
  • subdomain3.example.com
  • проблемный домен.example.com

  • Которые действительно размещены в:

  • var / www / default.example.com
  • var / www / subdomain1.example.com
  • var / www / subdomain2.example.com
  • var / www / subdomain3.example.com
  • var / www / problemdomain.example.com

  • Иногда люди из некоторых интернет-провайдеров не могут получить доступ к одному из доменов, сегодня это

    проблемный домен.example.com

    ОДНАКО эти пользователи МОГУТ маршрутизировать на сервер через его IP-адрес и получать корневую целевую страницу сервера по умолчанию:

    123.123.123.123

    КОТОРЫЙ переводит их на default.example.com

    Примечание. Каталог, в который я хочу, чтобы они попали, находится НАД текущим каталогом, а просмотр каталога отключен.

    ИДЕЯ 1: Если они могут получить IP-адрес сервера, и я создаю целевой каталог (default.example.com/foo), могу ли я каким-то образом перенаправить их в другую папку на сервере, тем самым доставив их в нужное место? Как бы я это сделал? * Помните, что DNS не работает, поэтому я бы подумал, что перенаправление 301 не сработает, потому что он просто скажет их браузеру искать 'problemdomain.example.com', который они не могут решить.

    Перефразируя словесный язык: Есть ли способ сказать apache: «Эй, если кто-то запрашивает каталог 'foo' на целевой веб-странице главного сервера по умолчанию:

    123.123.123.123/foo

    ТОГДА перенесите их на этот другой виртуальный хост на сервере

    проблемный домен.example.com/foo

    Или есть что-то вроде использования:

    123.123.123.123:virtualhostname

    или какая-то другая «сила» для этого? Для меня нереально просить конечных пользователей, у которых есть проблемы, добавлять записи о хостах в свою систему. Просто так, чтобы в тех редких случаях, когда ДЕЙСТВИТЕЛЬНО возникают проблемы, я могу сказать что-то более полезное, чем «просто попробуйте компьютер с другим подключением к сети».

    Большое спасибо за любую помощь.

    Я не думаю, что вы можете делать то, что хотите, автоматически. Когда клиент хочет подключиться к хосту, он решает проблему domain.example.com на IP-адрес. Он связывается с сервером по IP-адресу. В рамках разговора он передает заголовок Host

    Host: problemdomain.example.com
    

    Сервер использует заголовок Host, чтобы решить, как направить запрос на соответствующий виртуальный хост.


    В вашем случае запрос к резолверу не выполняется, поэтому клиент не знает хоста для связи с сервером, поэтому он не может, и это все.

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

    Однако это зависит от того, является ли один и тот же домен проблемным каждый раз - если это так, самое простое решение - поставить проблемный домен первым в списке. Apache по умолчанию использует первый домен, указанный для этого IP-адреса, если он не получает информацию о хосте. Если проблемный домен отличается, вы застряли в получении большего количества IP-адресов и размещении одного домена на каждом IP (что противоречит цели виртуальных хостов на основе имен), возвращая бремя ответственности на клиентское соединение (которое, как вы сказали, вы 'хотел бы избежать), или иметь домен "по умолчанию", не содержащий ничего, кроме простой целевой страницы, которая имеет ссылки на определенные страницы, которые можно отличить по имени или переписав URL. Какой из них доставит вам меньше всего длительных головных болей?