Использование номера порта в хост-файле Windows

191

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

Для файла хоста, расположенного в C: \ WINDOWS \ system32 \ drivers \ etc \, я также внес изменения, как показано ниже

ПЕРЕД
127.0.0.1 www.example.com

ПОСЛЕ
127.0.0.1:8080 www.example.com

Когда я захожу на сайт www.example.com, он не перенаправляется на мой сервер wampserver. Как я могу это исправить?

Чарльз Юнг
источник
Вам нужен HTTP-сервер NGNIX или Apache в качестве прокси-сервера для пересылки http-запросов в соответствующее приложение -> которое прослушивает определенный порт (или делает это с CNAME, предоставляющим хостинговую компанию)
Musa
Может быть, просмотрите это и переключите принятый ответ на ответ netsh? Я попал сюда, когда пытался выяснить, как сопоставить домены .test с моими образами докеров локально в Windows 10, и ответ netsh сработал как очаровательно!
Джерем
Вопрос в том, пытаетесь ли вы перенаправить весь хост на один порт (?!) Или просто порт 80 (этого хоста) на порт 8080? Большинство ответов здесь о том, как перенаправить (или хотя бы попытаться перенаправить ... ;-) порт 80 хоста на порт 8080 вашего "localhost". Пример: https://www.example.comдолжен идти в порт 8080? или по умолчанию 443? (как следует) Что означает: вы хотите, чтобы https также был перенаправлен на порт 8080 вашего локального хоста? Или вам все равно, куда это будет перенаправлено?
Илиас Илиадис

Ответы:

195

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

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

Мат
источник
6
как использовать закладки, можете ли вы привести нас к ссылке или некоторой документации или учебным пособиям об этом
adham dwikat
@ Джерем: ты должен сказать это ОП, я ничего не могу с этим поделать
Мат
1
@ Мат Это было бы хорошо, верно? Я просто хочу, чтобы другие, которые видят это, знали, чтобы прокрутить немного вниз и дать ему шанс. Я попал сюда, когда пытался выяснить, как сопоставить домены .test с моими образами докеров локально в Windows 10, и ответ netsh сработал как очаровательно!
Джерем
170

То, что вы хотите, может быть достигнуто путем изменения файла hosts через приложение Fiddler 2 .

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

  1. Установить Fiddler2

  2. Перейдите в меню Fiddler2: - Инструменты > HOSTS .. (нажмите, чтобы выбрать)

  3. Добавьте строку как это: -

    localhost:8080 www.mydomainname.com

  4. Сохраните файл и оформите заказ www.mydomainname.comв браузере.

Раджат Гупта
источник
34
Это плохое решение. Вы должны постоянно запускать Fiddler.
Джеймс Хакабон
49
@JamesHuckabone: у вас есть лучшее решение? нам бы это понравилось!
Раджат Гупта
16
Я получаю ошибку 400 Bad Request при использовании этого метода
Сэм
3
это больше не похоже на работу. Пробовал с обоими fiddler2 и fiddler4
basher
1
@basher U по-прежнему может писать сценарий в Fiddler's Rules.js точно. Функциональность хостов на Fiddler - это НЕ файлы хостов Windows, это воссоздание этих имен, чтобы с ними было легко работать. Это как автоответчики, это лишь часть того, что вы можете сделать, написав его напрямую. Если вы не можете что-то сделать с меню, запишите это.
m3nda
160

Мне удалось добиться этого с помощью Windows Network Toolnetsh .

Как указывает Мэт: файл hosts предназначен только для разрешения имен хостов, поэтому комбинация из двух сделала свое дело для меня.

пример


обзор

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

действия

  • Запустил мой сервер на localhost:8081
  • Добавил мой "локальный DNS" в файл hosts в качестве новой строки
    • 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 в качестве адреса подключения в основном является обязательным требованием в представленном случае, поскольку сервер запускается на локальном хосте , как это делают по умолчанию многие другие программы. Если вы можете начать с другого адреса, вам не нужен весь механизм переадресации портов, вам просто нужно изменить файл hosts ... Возможно, как подробно описано здесь , у вас не установлен протокол ipv6 : используйте следующую команду для установки они:netsh interface ipv6 install
Пау Кома Рамирес
14
Это должен быть принятый ответ, потому что инструменты уже установлены в моей базовой установке Windows 10, и это делает именно то, что мне нужно. Я думал об установке apache и mod_proxy, но это гораздо лучшее решение.
Макс Янг
2
Не работает для меня Netsh, кажется, пересылает адрес, но не порт.
steph643
2
Я пользуюсь докером. Он использует localhost на порту 9000. Модифицируя команду выше, я использую portainer.local без указания порта на адресе. Сначала я добавляю 127.0.0.1адрес для сопоставления portainer.localв мой файл hosts. Затем я запускаю: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 нажмите клавишу ввода в cmd / powershell, чтобы запустить его. После этого, выход Netsh путем ввода exit. В браузере набор текста http://portainer.localтеперь ведет меня туда, где http://localhost:9000раньше. Это сработало как обаяние для меня.
EffectiX
14

Fiddler2 -> Правила -> Пользовательские правила

затем найдите функцию OnBeforeRequest в конце следующего скрипта:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}
Сергей
источник
Действительно, Fiddler настолько мощен, что не рассчитывает запустить веб-сервер на порту 80 или даже в Skype ... В Windows работает лучше, чем в Linux с Mono, по крайней мере с функциями захвата, потому что Linux не использует Inet из CLRL. Это лучший способ работать с Fiddler, потому что его можно экспортировать одним файлом.
m3nda
3

Простейшим способом является использование Ergo в качестве обратного прокси-сервера: https://github.com/cristianoliveira/ergo

Вы устанавливаете свои услуги и его IP: PORT и, следовательно, направляет его для вас :).

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

Кристиан Оливейра
источник
4
Ergo - это проект, над которым вы работали (основываясь на имени пользователя). Если это так, вам следует более четко указать, что вы связаны с этим продуктом. Смотрите этот ответ, а также другие ответы.
Фрэнк Тан
2

-Вы можете использовать любой свободный адрес в сети 127.0.0.0/8, в моем случае это нужно для python flask, и это то, что я сделал: добавьте эту строку в файл hosts (вы можете найти, что это windows под: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Удостоверьтесь, что порт является портом по умолчанию "80" в моем случае, это то, что в колбе питона: app.run("127.0.0.5","80")

  • Теперь запустите ваш код и просмотрите flask.dev

Белал Мухаммед
источник
1

Если происходит то, что на локальном хосте работает другой сервер, и вы хотите дать этому новому серверу другое локальное имя хоста, например http://teamviewer/

Я думаю, что вы на самом деле ищете функциональность виртуальных хостов. Я использую Apache, поэтому не знаю, как другие веб-демоны поддерживают это. Может быть, это называется Alias. Вот документация Apache:

Примеры виртуальных хостов Apache

DogBot
источник
1

Использование netsh с connectaddress = 127.0.0.1 не работает для меня.

Несмотря на то, что я искал повсюду в Интернете, я не смог найти решение, которое решило бы эту проблему для меня, которое заключалось бы в использовании connectaddress = 127.xxx (т. Е. Любого адреса 127. ipv4, просто не 127.0.0.1), так как это похоже на обратную ссылку на localhost то же самое, но без ограничения, так что петля работает в netsh.

aards
источник
Я предлагаю вам удалить первый и последний абзацы. Просто скажите, что существующие решения не работают, и вы нашли другое. В противном случае ваш ответ будет очень похож на комментарий, поэтому люди могут пометить его как «не ответ», и он будет удален.
StaceyGirl
0

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

Musa
источник