Викриття localhost в Інтернеті через тунелювання (за допомогою ngrok): помилка HTTP 400: неправильний запит; недійсне ім'я хоста


210

З попередніх версій запитання є наступне: переглядайте веб-сайт із ip-адресою, а не localhost , який в значній мірі окреслює те, що я робив дотепер ... Мені локальний IP працює. Потім я знайшов ngrok, і, мабуть, мені не потрібно підключатися через IP.


Те, що я намагаюся зробити, - це відкрити свій веб-сайт, що працює на localhost, в Інтернеті. Я знайшов інструмент, який зробить це: ngrok.

Запускаючи веб-сайт у візуальній студії, він запускається через localhost / port #. Я запускаю команду "ngrok http port #" у командному рядку. Начебто все починається нормально. Я генерую пару URL-адрес, і URL-адреса перевірки ngrok (localhost: 4040) працює.

Єдина проблема полягає в тому, що коли я переходжу до генерованих URL-адрес, я отримую помилку HTTP 400: неправильний запит, неправильне ім'я хоста. Це інша помилка, ніж коли я запускаю "ngrok http errorport #", що не знайдено помилку хоста ... тому я думаю, що щось добре відбувається. Я просто не можу сказати, що ...

Чи є мені якийсь крок, щоб відкрити свій сайт в Інтернеті через тунельну послугу? Якщо є, я не можу знайти його в документації на ngrok.

Відповіді:


564

Усуньте цю проблему за допомогою ngrok. За словами непоказних, деякі програми розлючуються, коли бачать інший заголовок хосту, ніж очікувалося.

Запуск наступної команди повинен вирішити проблему:

ngrok http [port] -host-header="localhost:[port]"

3
Дякую. Я раніше дотримувався інструкцій Девіна Радера, детальних тут, але це тепер полегшує цей шлях. twilio.com/blog/2014/03/…
— sobelito

Це рішення також працює, якщо у вас виникли проблеми з додаванням іншого прив'язки до applicationHost.config (vs2015 / iisexpress). Не потрібно додавати один, просто скористайтеся цією відповіддю. Нарешті, якщо ви заплатили за користувальницький домен, щоб уникнути зміни адреси кожного разу, просто додайте -subdomain = mysubdomain до вищевказаної відповіді.
— trevorc

4
Неможливо цього підтвердити достатньо! Для всіх складних та гнучких інструкцій, щоб зламати ваші прив'язки IISExpress та мережеві настройки, це прорізає все це, як гарячий ніж через масло.
— Ніл Ласлетт

19
Коли локальна програма є на https замість http, тоді ця ngrok http https://localhost:44362 -host-header="localhost:44362"
— версія

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

2
Якщо ви використовуєте ASP.NET Core, вам слід також прокоментувати app.UseHttpsRedirection()свій клас запуску, щоб уникнути 307 тимчасового перенаправлення.
— Марк Г

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

Це правильний спосіб переписати заголовок в ngrok. Жодна з інших відповідей не спрацювала. Уже встановлено IIS для будь-якого імені хоста, але ngrok повернув "ім'я хоста недійсним" при використанні -host-header = "localhost: 8892", однак ця версія перезапису працювала негайно.
— Tyeth


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для тестування, але навіть якщо це працює, зазвичай це велика робота, як завжди.


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