Предоставление локального хоста Интернету через туннелирование (с использованием ngrok): ошибка HTTP 400: неверный запрос; неверный адрес

210

Из предыдущих версий вопроса есть следующее: просмотрите веб-сайт с IP-адресом, а не с localhost , который в общих чертах описывает то, что я сделал до сих пор ... У меня работает локальный IP. Тогда я нашел ngrok, и, видимо, мне не нужно подключаться через IP.


То, что я пытаюсь сделать, это открыть мой сайт, работающий на локальном хосте, в Интернете. Я нашел инструмент, который сделает это: ngrok.

Запустив сайт в visual studio, он запускается на локальном хосте / порту #. Я запускаю команду "ngrok http port #" в командной строке. Кажется, все запускается нормально. Я генерирую пару URL, и URL проверки ngrok (localhost: 4040) работает.

Единственная проблема заключается в том, что когда я перехожу к сгенерированным URL-адресам, я получаю ошибку HTTP 400: неверный запрос неверного имени хоста. Это другая ошибка, чем когда я запускаю "ngrok http неправильный порт #", который является ошибкой хоста не найден ... поэтому я думаю, что происходит что-то хорошее. Я просто не могу сказать, что ...

Есть ли какой-то шаг, который я пропускаю при открытии своего сайта в Интернете через сервис туннелирования? Если есть, я не могу найти его в документации ngrok.

Кристофер
источник

Ответы:

564

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

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

ngrok http [port] -host-header="localhost:[port]"
Кристофер
источник
3
Спасибо. Ранее я следовал инструкциям Девина Рэйдера, подробно изложенным здесь, но теперь это облегчает этот процесс. twilio.com/blog/2014/03/…
sobelito
Это решение также работает, если у вас возникают проблемы при добавлении другой привязки к applicationHost.config (vs2015 / iisexpress). Вам не нужно добавлять один, просто используйте этот ответ. Наконец, если вы заплатили за собственный домен, чтобы избежать изменения адреса каждый раз, просто добавьте -subdomain = mysubdomain к ответу выше.
Треворц
4
Не могу отказать этому достаточно! Для всех сложных и ошибочных инструкций по взлому ваших привязок IISExpress и сетевых настроек, это прорезает все это, как горячий нож сквозь масло.
Нил Ласлетт
19
Когда локальный находится на HTTPS, а не HTTP, то работает этот вариант выше:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh
1
вау, я потратил почти 2 часа, чтобы понять это. Моя единственная проблема заключалась в том, что я добавлял https в -host-header. вот так: ngrok http https://localhost:44392 -host-header="https://localhost:44392" удаление https: // из параметра -host-header решило мою проблему. Спасибо
Дейв
48

Следующая команда решит проблему

ngrok http -host-header=localhost 8080
Sathish
источник
2
Если вы используете ASP.NET Core, вы также должны закомментировать app.UseHttpsRedirection()в своем классе запуска, чтобы избежать временного перенаправления 307.
Марк G
39

Это не сработало для меня. Вы могли бы сделать следующее:

Для IIS Express

В VS 2015: перейдите в .vs\config\applicationhost.configпапку в вашем проекте

В VS 2013 и более ранних версиях: Перейти к %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Найдите привязку, которая говорит:

<binding protocol="http" bindingInformation="*:5219:localhost" />

Для меня это был проект, работающий на порту 5219

измените это на

  <binding protocol="http" bindingInformation="*:5219:" />

IIS Express теперь будет принимать все входящие соединения через этот порт.

Недостаток: вам нужно запустить IIS Express от имени администратора.

или вы можете переписать заголовок узла в Ngrok:

ngrok.exe http -host-header=rewrite localhost:5219
Stefanvds
источник
Это правильный способ переписать заголовок в ngrok. Ни один из других ответов не сработал. Для IIS уже установлено любое имя хоста, но ngrok возвратил «имя хоста недействительно» при использовании -host-header = «localhost: 8892», однако эта версия перезаписи сработала немедленно.
Тайет
6

Для httpsэтого работает:

ngrok http https://localhost:<PORT> -host-header="localhost:<PORT>"

Джоэл Виклунд
источник
0

Самым простым для меня было использование iisexpress-proxy + ngrok.

Сначала я устанавливаю iisexpress-proxyглобально с npm

npm install -g iisexpress-proxy

Тогда я прокси мой локальный хост с ним. Скажем, например, мой сайт работает 3003.

iisexpress-proxy 3003 to 12345где 12345находится новый http-порт, к которому я хочу подключиться.

Тогда я могу запустить ngrok на нем.

./ngrok.exe http 12345

Это просто работает! 😃

Но я думаю, что это работает только с http. Прямо сейчас я не использую httpsдля тестирования, но даже если это работает, обычно это большая работа, как всегда.

Рюэль Рибейро
источник
-7

Шаги.

  1. Запустите команду на своей консоли из каталога ngrok.exe. http-порт ngrok, т.е. http 80 ngrok https://www.screencast.com/t/oyuEPlR6Z Set

  2. Нгрок URL вашего приложения.

Это создаст туннель для вашего приложения.

Спасибо .

Равиндер Рана
источник