Використання номера порту у файлі хоста Windows


190

Після встановлення TeamViewer я змінив порт wampserver на 8080, тому адреса є http://localhost:8080.

Для хост-файлу, розташованого за адресою C: \ WINDOWS \ system32 \ driver \ etc \, я також внесла зміни, як показано нижче

ПЕРЕД
127.0.0.1 www.example.com

ПІСЛЯ
127.0.0.1:8080 www.example.com

Коли я отримую доступ до www.example.com, він не переспрямовується на мій wampserver, як це можна виправити?


Вам потрібен сервер HTTP NGNIX або Apache як проксі-сервер для переадресації HT-запитів до відповідної програми -> яка прослуховує конкретний порт (або робити це за допомогою CNAME, який надає хостинг-компанія)
Musa


Може перегляньте це і переключіть прийняту відповідь на відповідь netsh? Я опинився тут, намагаючись зрозуміти, як відобразити домени .test на мої докерські зображення локально в Windows 10, і відповідь netsh спрацювала як шарм!
Jereme

Питання в тому, чи намагаєтесь ви переспрямувати цілий хост на один порт (?!) Або просто порт 80 (цього хоста) на порт 8080? Більшість відповідей тут стосується того, як перенаправити (або принаймні спробувати перенаправити ... ;-) порт 80 хоста на порт 8080 вашого "localhost". Приклад: https://www.example.comтреба перейти до порту 8080? або до 443 за замовчуванням? (як слід) Що означає: чи ви хочете, щоб https також було перенаправлено на порт 8080 вашого localhost? Або вам зовсім не байдуже, куди це буде перенаправлено?
ilias iliadis

Відповіді:


195

The hostsФайл тільки для розпізнавання імен (на Windows , а також на Unix-подібних системах). Ви не можете помістити номери портів туди, і немає можливості зробити те, що ви хочете, із загальною конфігурацією на рівні ОС - браузер - це те, що обирає порт, який вибирати.

Тому використовуйте закладки або щось подібне.
(Деякі програми брандмауера / маршрутизації можуть дозволити перенаправлення вихідного порту, але це насправді не звучить як привабливий варіант для цього.)


6
як використовувати закладки, чи можете ви привести нас до посилання або до якоїсь документації чи підручників з цього приводу
adham dwikat

@Jereme: ти повинен сказати це в ОП, я нічого не можу з цим зробити
Мат

1
@Mat Це було б добре, правда? Я просто хочу, щоб інші, хто бачив це, знали, щоб трохи прокрутити вниз і дати йому постріл. Я опинився тут, намагаючись зрозуміти, як відобразити домени .test на мої докерські зображення локально в Windows 10, і відповідь netsh спрацювала як шарм!
Jereme

170

Що ви хочете, можна досягти, змінивши файл хостів через Fiddler 2 додаток .

Виконайте такі дії:

  1. Встановити Fiddler2

  2. Перейдіть до меню Fiddler2: - Інструменти > ХОСТИ .. (Клацніть, щоб вибрати)

  3. Додайте такий рядок: -

    localhost:8080 www.mydomainname.com

  4. Збережіть файл і потім оформити замовлення www.mydomainname.comу веб-переглядачі


34
Це погане рішення. Потрібно постійно працювати з Fiddler.
Джеймс Хаккабон

49
@JamesHuckabone: У вас є краще рішення? ми б це любили!
Раджат Гупта

16
Я отримую помилку 400 Поганий запит, коли я використовую цей метод
Сем

3
здається, це більше не працює. Спробував це з fiddler2 та fiddler4
basher

1
@basher U все ще може його сценарій на Fiddler's Rules.js точно. Функціональність хостів у Fiddler - це НЕ файли хостів Windows, це відтворення цих імен, щоб зробити їх зручнішими. Подібно до Автовідповідачів, це лише підмножина того, що ви можете робити сценарії безпосередньо. Якщо ви нічого не можете зробити з меню, скриптуйте це.
м3нда

159

Цього мені вдалося досягти, використовуючи мережевий інструмент, що включає Windowsnetsh .

Як зазначає Мат: Файл хостів призначений лише для дозволу імені хоста, тому комбінація обох зробила для мене хитрість.

Приклад


Огляд

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

Дії

  • Запустив мій сервер на localhost:8081
  • Додано мій "локальний DNS" у файл хостів як новий рядок
    • 127.65.43.21 example.app
      • Будь-яка безкоштовна адреса в мережі 127.0.0.0/8( 127.x.x.x) може бути використана.
      • Примітка. Я припускаю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


Посилання на ресурси:


Це не працює для мене. У посиланні, яке ви показали, написано: "Також ви не можете використовувати 127.0.0.1 як з'єднувальну адресу."
Дон Бокс

@DonBox: Якщо ви вкажете більш детальну інформацію про налаштування, можливо, я можу вам допомогти. Використання 127.0.0.1 як адреси підключення - це в основному вимога у представленому сценарії випадку, оскільки сервер запускався у localhost , як це роблять за замовчуванням багато інших програм. Якщо ви можете почати з іншої адреси, вам не потрібен весь механізм переадресації портів, вам просто потрібно змінити файл хостів ... Можливо, як детальніше тут , у вас не встановлено протокол ipv6 : використовуйте наступну команду для встановлення їм:netsh interface ipv6 install
Пау Кома Рамірес

13
Це має бути прийнятою відповіддю, оскільки інструменти вже встановлені в моєму базовому вікні 10 встановлення, і це робить саме те, що мені потрібно. Я розглядав можливість встановлення apache та mod_proxy, але це набагато краще рішення.
Макс Янг

2
Не працює для мене. Здається, Netsh пересилає адресу, але не порт.
steph643

2
Я використовую переноску докера. Він використовує localhost на порту 9000. Змінюючи команду вище, я використовую portainer.local, не вказуючи порт на адресу. Спочатку я додаю 127.0.0.1як адресу відповідність portainer.localу файлі моїх хостів. Потім я запускаю: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 Натисніть клавішу enter у cmd / powershell, щоб запустити її. Після цього вийдіть з netsh, набравши текст exit. У браузері введення тексту http://portainer.localпереводить мене туди, де http://localhost:9000раніше. Це спрацювало як шарм для мене.
EffectiX

14

Fiddler2 -> Правила -> Спеціальні правила

потім знайдіть функцію OnBeforeRequest на put у наступному скрипті в кінці:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

Дійсно, Fiddler настільки потужний, ніж розраховувати не запускати веб-сервер на порт 80 або навіть Skype ... У Windows працює краще, ніж у Linux з Mono, принаймні функції захоплення, адже Linux не використовує Inet від CLRL. Це більш приємний спосіб робити речі на Fiddler, тому що це можливо експортувати з 1 файлом.
м3нда

3

Найпростіший спосіб - використовувати Ergo як ваш зворотний проксі: https://github.com/cristianoliveira/ergo

Ви налаштовуєте свої послуги та його IP: PORT та ergo спрямовують його для вас :).

Ви можете досягти того ж за допомогою nginxабо, apacheале вам потрібно буде їх налаштувати.


4
Ergo, здається, є проектом, над яким ви працювали (на основі імені користувача). Якщо це так, ви повинні більш чітко вказати, що ви пов’язані з цим продуктом. Дивіться цю відповідь , а також інші відповіді.
Франк Тан

2

-Ви можете використовувати будь-яку безкоштовну адресу в мережі 127.0.0.0/8, в моєму випадку це знадобилося для колби python, і це те, що я зробив: додайте цей рядок у файл хостів (ви можете знайти, що це вікна під: C: \ Windows \ System32 \ драйвери \ тощо):

127.0.0.5 flask.dev
  • Переконайтесь, що порт - порт 80 за замовчуванням, в моєму випадку це те, що знаходиться в колбі python: app.run("127.0.0.5","80")

  • тепер запустіть свій код і перегляньте flask.dev


1

Якщо це відбувається, це те, що у вас є інший сервер, який працює на localhost, і ви хочете надати цьому новому серверу інше локальне ім'я, наприклад http://teamviewer/

Я думаю, що те, що ви насправді шукаєте, - це функція Virtual Hosts. Я використовую Apache, тому не знаю, як інші веб-демон підтримують це. Можливо, його називають псевдонімом. Ось документація Apache:

Приклади віртуальних хостів Apache


1

Використання netsh з connectaddress = 127.0.0.1 мені не вийшло.

Не дивлячись на те, що шукати всюди в Інтернеті, я не міг знайти рішення, яке вирішило б це для мене, а саме: використовувати connectaddress = 127.xxx (тобто будь-яку адресу 127. ipv4, просто не 127.0.0.1), оскільки це, мабуть, посилається на localhost просто те саме, але без обмежень, так що циклічна робота працює в netsh.


Я пропоную вам вилучити перший та останній абзаци. Просто скажіть, що існуючі рішення не спрацювали, і ви знайшли інше. Інакше ваша відповідь схожа на коментар, тому люди можуть позначити її як "не відповідь", і вона буде видалена.
StaceyGirl


0

Вам потрібен сервер HTTP NGNIX або Apache як проксі-сервер для пересилання http-запитів у відповідну програму -> яка прослуховує конкретний порт (або робити це за допомогою CNAME, який надає хостинг-компанія). Це найпотужніше рішення, і це просто дійсно простий спосіб продовжити додавання нових субдоменів або автоматично додавати нові домени, коли записи DNS вказуються на сервер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.