Викриття 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.