Mengekspos localhost ke internet melalui tunneling (menggunakan ngrok): Kesalahan HTTP 400: permintaan buruk; nama host tidak valid


210

Dari versi sebelumnya dari pertanyaan, ada ini: Jelajahi situs web dengan alamat ip daripada localhost , yang menguraikan cukup banyak apa yang telah saya lakukan sejauh ini ... Saya punya IP lokal yang berfungsi. Kemudian saya menemukan ngrok, dan ternyata saya tidak perlu terhubung melalui IP.


Apa yang saya coba lakukan adalah mengekspos situs web saya yang berjalan di localhost ke internet. Saya menemukan alat yang akan melakukan ini: ngrok.

Menjalankan situs web di studio visual, situs web dijalankan di localhost / port #. Saya menjalankan perintah "ngrok http port #" di baris perintah. Semuanya tampaknya mulai baik-baik saja. Saya menghasilkan beberapa URL, dan url inspeksi ngrok (localhost: 4040) berfungsi.

Satu-satunya masalah adalah bahwa ketika saya pergi ke URL yang dihasilkan, saya mendapatkan kesalahan HTTP 400: nama hostname yang salah valid. Ini adalah kesalahan yang berbeda dari ketika saya menjalankan "ngrok http wrongport #", yang merupakan host tidak ditemukan kesalahan ... jadi saya pikir sesuatu yang baik sedang terjadi. Aku tidak tahu apa ...

Apakah ada langkah yang saya lewatkan dalam mengekspos situs saya ke internet melalui layanan tunneling? Jika ada, saya tidak dapat menemukannya di dokumentasi ngrok.

Jawaban:


564

Pecahkan masalah ini dengan ngrok. Dalam kata-kata yang tidak dapat dihindari, beberapa aplikasi menjadi marah ketika mereka melihat header host yang berbeda dari yang diharapkan.

Menjalankan perintah berikut akan memperbaiki masalah:

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

3
Terima kasih. Saya sebelumnya mengikuti instruksi dari Devin Rader yang dirinci di sini, tetapi ini sekarang membuat cara ini lebih mudah. twilio.com/blog/2014/03/...
sobelito

Solusi ini juga berfungsi jika Anda mengalami kesulitan menambahkan pengikatan lain ke applicationHost.config (vs2015 / iisexpress). Anda tidak perlu menambahkan satu cukup gunakan jawaban ini. Akhirnya, jika Anda membayar untuk domain khusus untuk menghindari mengubah alamat setiap kali tambahkan saja -subdomain = mysubdomain ke jawaban di atas.
trevorc

4
Tidak dapat cukup mengungguli ini! Untuk semua instruksi rumit dan buggy di luar sana untuk meretas ikatan IISExpress Anda dan pengaturan jaringan, ini memotong semuanya seperti pisau panas melalui mentega.
Neil Laslett

19
Ketika lokal di https bukan http maka variasi di atas berfungsi:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
wow, saya menghabiskan hampir 2 jam mencari yang satu ini. satu-satunya masalah saya adalah saya menambahkan https di -host-header. seperti ini: ngrok http https://localhost:44392 -host-header="https://localhost:44392" menghapus https: // dari parameter -host-header menyelesaikan masalah saya. Terima kasih
Dave

48

Perintah berikut akan memperbaiki masalah ini

ngrok http -host-header=localhost 8080

2
Jika menggunakan ASP.NET Core Anda juga harus berkomentar app.UseHttpsRedirection()di kelas Startup Anda untuk menghindari 307 Pengalihan Sementara.
Mark G

39

Ini tidak berhasil untuk saya. Anda dapat melakukan hal berikut:

Untuk IIS Express

Di VS 2015: Buka .vs\config\applicationhost.configfolder di proyek Anda

Di VS 2013 dan sebelumnya: Pergi ke %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Temukan ikatan yang mengatakan:

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

Bagi saya itu adalah proyek yang berjalan di pelabuhan 5219

ubah ke

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

IIS Express sekarang akan menerima semua koneksi masuk di port itu.

Kerugian: Anda perlu menjalankan IIS Express sebagai admin.

atau Anda dapat menulis ulang header host di Ngrok:

ngrok.exe http -host-header=rewrite localhost:5219

Ini adalah cara yang benar untuk menulis ulang header di ngrok. Tidak ada jawaban lain yang berfungsi. Sudah mendapatkan IIS yang disetel ke nama host apa pun, tetapi ngrok mengembalikan "nama host tidak valid" saat menggunakan -host-header = "localhost: 8892" namun versi penulisan ulang ini langsung bekerja.
Tyeth

6

Untuk httpsini bekerja:

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


0

Hal paling sederhana bagi saya adalah menggunakan iisexpress-proxy + ngrok.

Pertama saya menginstal iisexpress-proxysecara global dengan npm

npm install -g iisexpress-proxy

Lalu saya proksi localhost saya dengan itu. Katakan misalnya situs saya sedang berjalan 3003.

iisexpress-proxy 3003 to 12345di mana 12345port http baru yang ingin saya proksi.

Maka saya bisa menjalankan ngrok di atasnya.

./ngrok.exe http 12345

Itu hanya bekerja! 😃

Tapi saya pikir itu hanya bekerja dengan http. Saat ini saya tidak menggunakan httpsuntuk menguji, tetapi bahkan jika itu berhasil, biasanya banyak pekerjaan seperti biasa.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.