Тестирование способности серверов обслуживать определенный домен

11

Допустим, вы Server Aнастроили своего любимого демона веб-сервера для обслуживания www.example.com. Теперь вы хотите переместить это в Server B. После множества копий и настройки новый сервер, похоже, готов. Заключительный тест будет в порядке: перед изменением DNS-записей, как запросить www.example.comсервер B, если записи DNS по-прежнему указывают на сервер A?


Хотя на мой основной вопрос был дан ответ, в случае, если / etc / hosts не находится под моим влиянием, возможно ли проверить его с помощью telnet, вместо этого говоря необработанный HTTP1.1 веб-серверу?

Ярмунд
источник
8
Пожалуйста, не редактируйте свой вопрос, чтобы задать совершенно новый вопрос. Он имеет тенденцию (в некоторой степени) лишать законной силы существующие ответы, а также платформа не отправляет уведомления о том, что вопрос также изменился, из-за чего маловероятно, что люди, уже связанные с вашим вопросом, повторно посетят свои ответы. Вы можете оставить им прямой комментарий, что у вас есть дополнительный вопрос. Часто лучшей стратегией является задание нового вопроса (возможно, указывая на ваши предыдущие вопросы и ответы).
HBruijn
2
Высоко оцениваю голосование только за полную смену ворот с правкой. > _ <
Уэсли

Ответы:

12

DNS это волшебная вещь. Имея достаточный контроль над клиентским ПК, вы можете превратить right.comв wrong.comи viceversa.io. Перейдите на тестовый клиентский ПК и измените его разрешение DNS, либо изменив файл хоста на этом клиенте, либо вы можете сделать что-то более сложное и дать этому хосту простой DNS-сервер для запросов, например dnsmasq. В любом случае, конечная цель состоит в том, чтобы сделать ответ DNS на запросы, относящиеся к ответу, www.example.comс IP-адресом для сервера B. Заголовки хоста HTTP будут иметь имя DNS для www.example.com, но будут направлены на Сервер Б.

Магия!

Wesley
источник
3
Как-то /etc/hostsне пришло мне в голову, и это сработало отлично. Приветствия за напоминание!
Джармунд
2
hostsФайл не участвует в разрешении DNS , но это совершенно отдельный механизм поиска имени , что библиотека определителя обеспечивается клиентской ОС может, и в большинстве случаев будет, использование в дополнении к DNS - запросам в. Лично я думаю, что «это волшебство» просто означает «нет необходимости понимать», что, безусловно, плохо для профессионалов.
Хокан Линдквист
@ HåkanLindqvist Вы очень неправильно поняли контекст и использование фразы.
Уэсли
В любом случае, файл hostsDNS . Это SF; Я ожидаю, что люди здесь, если угодно, узнают разницу.
Илмари Каронен
@IlmariKaronen И я не говорил, что файлы хостов - это DNS, поэтому ваши ожидания в отношении ServerFault оправдались, и у нас все хорошо! ᕕ (ᐛ) ᕗ
Уэсли
11

Важно отметить, что проведение такого теста для 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 на клиенте на сервер имен, который настроен для ответа по желанию.

Хокан Линдквист
источник
1
+1 за решение, которое не предполагает дурачиться с разрешением имен
Jarmund
2
Недавние curlпозволяют вам переопределить обычное разрешение имен (DNS или hostfile) и по-прежнему делать заголовки автоматически, а также SNI при использовании / проверке httpS. Смотрите --resolveв своей man- странице или на curl.haxx.se/docs/manpage.html .
dave_thompson_085
4

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

Команда будет примерно такой:

telnet serverb 80

Запрос будет выглядеть примерно так:

GET / HTTP/1.1
Host: www.example.com

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

briantist
источник
1
Nitpick: хотя HTTP-заголовки не должны быть чувствительными к регистру, нормативный Hostзаголовок не является заглавными. (И, видимо, некоторые серверы могут иметь проблемы с различными прописными буквами.)
Боб,
@Bob true, отредактировано
briantist
3

Обычно я заставляю www.example.com использовать IP-адрес сервера B в моем / etc / hosts. Я делал это с тех пор, как использовал Mosaic, и так как я делаю это нечасто, я не чувствовал необходимости искать лучшее.

Осмотревшись немного, я нашел /superuser/403042/custom-host-file-for-firefox, на который отвечает https://addons.mozilla.org/es/firefox/addon/. foxyproxy-standard /, но в одном недавнем сообщении говорится, что он заброшен.

Law29
источник
Отвечая на ваши изменения, запрашивая метод тестирования без / etc / hosts, да, он существует. Это может быть либо telnet для базового тестирования, аддон, такой как я упомянул в моем ответе выше, либо настраиваемый прокси-сервер, либо (и этот метод я бы предпочел) ServerAlias ​​на сервере B, например, www2.example. ком.
Law29
3

Если вам нужно проверить , если он работает, я советую простой Broswer плагин , как Modify Headersдля Firefox, и изменить HOSTк www.mydomain.com.

bukk530
источник