Можно ли настроить файл хостов Windows для использования IP-адреса и порта?


13

Я хочу настроить файл хостов Windows для отправки запросов хостов на основе IP-адреса + портов.

Например:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com

Потому что у меня Apache прослушивает порт 8080 и IIS на порт 80 (по умолчанию).

Поэтому я думаю, что лучший способ сделать это - изменить hostsфайл. Это ни на что не влияет. Ни я не получаю ни ошибки, ни сообщения.


1
Вы получите лучший ответ, задав такой вопрос на serverfault.com
Карл Норум

Почему вы не можете просто запустить site1.com (: 80) и sitetwo.com:8080 в своем браузере?
Иван,

Ответы:


11

Ты не можешь Файл hosts - это просто hosts. Это эквивалент «короткозамкнутого» DNS на вашем локальном компьютере. DNS также не может отправить вас в порты.

Чтобы добиться того, что вы пытаетесь сделать, вам нужно настроить виртуальный хостинг под IIS или Apache и использовать его (на основе заголовка HTTP Host:), чтобы служба могла решить, какой сайт представить. Однако это не поможет, если вы хотите сделать это одновременно с IIS и Apache.


не могли бы вы, пожалуйста, прояснить, я не понял о виртуальном хостинге. Как я могу сделать виртуальный хостинг?

4
  • hostsФайл только для разрешения имен
  • Браузер , при отсутствии непосредственно с указанием порта: то есть <hostname>:<port>, по умолчанию порт80

Сценарий типичной проблемы

  1. приложения обычно устанавливают свои серверы на тот же адрес IP по умолчанию 127.0.0.1ака localhost (определенного в файле хостов) .
  2. чтобы избежать коллизий между, возможно, другими существующими / работающими серверами, приложение, как правило, позволяет изменить порт, но не IP-адрес.

    2а. Если бы вы могли изменить ip-адрес сервера на другой в зарезервированном адресном пространстве loopback 127.0.0.0/8 , вы, вероятно, не пытались бы устанавливать порты в файле hosts.

Возможное решение

Вы можете обойти это, используя Windows Networking Network netshв качестве прокси порта.


обзор

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

действия

  • Запустите свой сервер на localhost:8081
  • Добавьте "локальный DNS" в файл hosts в качестве новой строки
    • 127.65.43.21 example.app
      • Любой свободный адрес в сети 127.0.0.0/8может быть использован.
      • Примечание: я предполагаю,127.65.43.21:80что не занят другой службой.
      • Вы можете проверить с netstat -a -n -p TCP | grep "LISTENING"
  • добавьте следующую конфигурацию сети с помощью утилиты netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Доступ к серверу по адресу http://example.app

Примечания:
- Эти команды / изменения файла должны выполняться с правами администратора.

- netsh portproxy нуждается в библиотеках ipv6 даже только для использования v4tov4, обычно они также будут включены по умолчанию, в противном случае установите их с помощью следующей команды:netsh interface ipv6 install


Вы можете увидеть запись, которую вы добавили с помощью команды:

netsh interface portproxy show v4tov4

Вы можете удалить запись с помощью следующей команды:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Ссылки на ресурсы:

Примечание: этот ответ является дублированием моего ответа, который обсуждался в этом аналогичном вопросе / ответе по stackoverflow.


Это отличный ответ ... спасибо за ссылки на ресурсы!
Эрик Хепперле - CodeSlayer2010

3

Нет, ты не можешь. Если это не работает, значит что-то еще идет не так.

127.0.0.1 site.com
127.0.0.1 www.site.com

Я предполагаю, что это для разработки коробки?

DNS преобразует site.com и www.site.com в localhost, если вы не делаете что-то вроде прокси-запросов DNS. Возможно, вам следует обратиться к ServerFault за помощью в настройке веб-сервера, это наиболее вероятная проблема.


Спасибо за помощь!!! А нет пути ??? Тогда как я могу запустить iis и apache параллельно с разными портами

Они все еще идут по тому же адресу, порт даже не учитывает, что делают хосты. Порт все равно будет работать, вы можете запустить их параллельно.
Xorlev

3

Вы можете сделать это с Fiddler . С помощью скрипта Fiddler вы можете делать много удивительных вещей.

Если вы установите хосты, как это

127.0.0.1     www.site1.com    # Port 80
127.0.0.1     www.sitetwo.com  # Port 8080

Добавьте это в CustomRules.js (чтобы открыть CustomRules.js , выберите « Настроить правила» в меню « Правила Fiddler» )

// this method is already exist
static function OnBeforeRequest(oSession: Session) {  
    if (oSession.host.toLowerCase() == "www.sitetwo.com") 
        oSession.host = "www.sitetwo.com:8080";
    ...
}

Затем Fiddler преобразует хост, и вы подключитесь к порту 8080.


Вам известна какая-либо альтернатива с открытым исходным кодом (james, owasp zap или другая), которая может использоваться для того же эффекта?
23 марта

1

Вы используете серверы только для локальной разработки? Если это так, вы можете настроить Apache на прослушивание 127.0.0.2:80 и перенаправить его с файлом hosts на имя домена, которое вам нравится.


0

Как и в других файлах ответов, хост-файл не имеет информации о порте, но вы можете создать страницу с перенаправлением, смещенную на заголовок, как apache или IIS для виртуального хостинга на основе имен. Проверьте заголовок и перенаправьте при необходимости. Однако я не вижу в этом ценности, потому что вы заново изобретаете колесо. Apache поддерживает виртуальный хостинг на основе портов, и я полагаю, что это так.

Ваша цель - иметь машину для разработки с обоими работающими системами? Это для производственной ситуации.



-1

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

файл hosts:

  • 127.0.0.1 local.site1.com
  • 127.0.0.1 local.site2.com

В IIS создайте новый веб-сайт и для local.site1.com & local.site2.com

Настройка IIS

  • IP-адрес: все неназначенные (будет использоваться локальный хост или любой другой доступный IP)
  • Порт: любой, кроме того, который уже используется (81,82,83 и т. Д. 80 уже используется веб-сайтом по умолчанию)
  • Имя хоста: оставьте поле пустым

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

После этого вы можете использовать следующие URL для доступа к веб-сайтам с локального компьютера или из локальной сети.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.