Чи можна налаштувати файл хостів 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
Carl

Чому ви не можете просто запустити site1.com (: 80) та sitetwo.com:8080 у своєму браузері?
Іван

Відповіді:


11

Ви не можете. Файл хостів саме такий - хости. Це еквівалент "короткого замикання" DNS всередині вашої локальної машини. DNS також не може надіслати вас до портів.

Щоб досягти того, що ви намагаєтеся зробити, ви хочете налаштувати віртуальний хостинг під IIS або Apache, і використовувати це (на основі заголовка HTTP Host: заздалегідь), щоб сервіс міг вирішити, який сайт подавати. Це вам не допоможе, якщо ви хочете робити це одночасно з IIS та Apache.


Чи можете ви зрозуміти, будь ласка, я не розумів щодо віртуального хостингу Як я можу зробити віртуальний хостинг?

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

Типовий сценарій проблеми

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

    2а. Якби ви могли змінити ip-адресу серверів на іншу в резервному адресному просторі для зворотного зв'язку 127.0.0.0/8 , ви, ймовірно, не намагалися б встановити порти у файлі хостів.

Можливе рішення

Ви можете обійти це, використовуючи мережевий інструмент, включений у Windows , 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" у файл хостів як новий рядок
    • 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.


Чи знаєте ви будь-яку альтернативу з відкритим кодом (Джеймс, Овасп Зап або інше), яка може бути використана для того ж ефекту?
березня 2118 р.

1

Ви використовуєте сервери лише для локальної розробки? Якщо так, ви можете поставити Apache для прослуховування 127.0.0.2:80 і перенаправити його з файлом hosts на ім'я домену, яке вам подобається.


0

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

Ваша мета - створити машину розвитку, яка працює на обох - це для виробничої ситуації.



-1

Це ви можете зробити, це було б корисно лише для місцевого розвитку.

файл хостів:

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