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

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

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

Например:

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

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

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

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

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

  • В hosts файл предназначен только для разрешения имени хоста
  • В браузер, при отсутствии прямого указания порта: т.е. <hostname>:<port>, значения по умолчанию портировать 80

Типичный сценарий проблемы

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

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

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

Вы можете обойти это, используя Окна включены Сетевой инструмент 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.

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

127.0.0.1 site.com
127.0.0.1 www.site.com

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

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

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

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

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

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

// 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.

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

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

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

Следуй этим шагам:

Install Fiddler2

Navigate to Fiddler2 menu:- Tools > HOSTS.. (Click to select)

Add a line like this:-

localhost:8080        www.mydomainname.com

Save the file & then checkout www.mydomainname.com in browser.

https://stackoverflow.com/questions/8652948/using-port-number-on-windows-xp-host-file

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

файл 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-адреса для доступа к веб-сайтам с локального компьютера или из локальной сети.