Скажите, что у вас есть Server A
настроить с вашим любимым веб-сервером-демоном для обслуживания www.example.com
. Теперь вы хотите переместить это в Server B
. После кучи копирования и настройки новый сервер вроде бы готов. Заключительный тест будет по порядку: перед изменением DNS-записей, как можно запросить www.example.com
с сервера B, когда записи DNS по-прежнему указывают на сервер A?
Хотя на мой основной вопрос был дан ответ, в случае, если / etc / hosts не находится в моей сфере влияния, можно ли проверить его с помощью telnet, вместо этого передавая необработанный HTTP1.1 на веб-сервер?
DNS - это волшебная вещь. Имея достаточный контроль над клиентским ПК, вы можете сделать right.com
в wrong.com
и viceversa.io
. Перейти на тестовый клиентский компьютер и испортить его разрешение DNS, либо изменив файл хоста на этом клиенте, либо вы можете сделать что-то более сложное и предоставить этому хосту простой DNS-сервер для запроса, например dnsmasq
. В любом случае, конечная цель - сделать DNS-ответ на запросы, касающиеся www.example.com
ответьте IP-адресом для сервера B. Заголовки хоста HTTP будут содержать DNS-имя для www.example.com, но нацелены на сервер B.
Магия!
Важно отметить, что то, что важно для проведения подобного теста для HTTP, на самом деле вообще не связано с DNS, а с тем, что HTTP-клиент отправляет в качестве Host
значение заголовка.
Очевидно, что клиенту необходимо подключиться к правильному IP-адресу и порту, но помимо этого все сводится к Host
заголовок, который встроен в сам HTTP-запрос.
Для быстрой проверки можно использовать следующую команду без изменения конфигурации уровня операционной системы на клиенте:
$ curl -H "Host: www.example.com" http://192.0.2.17/foo/bar
или, если на то пошло,
$ curl -H "Host: www.example.com" http://beta.example.com/foo/bar
Чтобы сделать то же самое с обычным веб-браузером, вам потребуется либо расширение браузера, которое может изменять заголовки запросов (или, возможно, прокси-сервер HTTP, который изменяет заголовки), либо вам нужно будет изменить конфигурацию операционной системы клиентского компьютера.
Как уже упоминалось, самым простым способом изменения конфигурации было бы добавление записи в hosts
файл. Таким образом, библиотека преобразователя клиентской ОС получит удар уже при обращении к hosts
файл и даже не нужно будет выполнять поиск в DNS.
Другие варианты включают изменение настроенных серверов распознавания DNS на клиенте на сервер имен, который настроен для ответа по желанию.
Вы можете проверить это с помощью telnet
. Вам нужно сделать необработанный HTTP-запрос, набрав команды. Вы не можете сделать никаких ошибок, и у некоторых серверов есть тайм-аут, поэтому вам также нужно ввести весь запрос в течение этого периода времени.
Команда будет примерно такой:
telnet serverb 80
Запрос будет выглядеть примерно так:
GET / HTTP/1.1
Host: www.example.com
Обратите внимание, что он должен заканчиваться пустой строкой, поэтому вам нужно дважды нажать Enter после заголовка хоста.
Обычно я заставляю www.example.com использовать IP-адрес сервера B в моем / etc / hosts. Я занимаюсь этим с тех пор, как использовал Mosaic, и, поскольку я делаю это нечасто, я не чувствовал необходимости искать что-то лучше.
Немного оглядевшись, я обнаружил https://superuser.com/questions/403042/custom-host-file-for-firefox на который отвечает https://addons.mozilla.org/es/firefox/addon/foxyproxy-standard/ но есть совсем недавняя записка, в которой говорится, что он заброшен.
Если вам нужно проверить, работает ли он, я советую простой плагин для браузера, например Modify Headers
для Firefox и измените HOST
к www.mydomain.com
.