การเปิดเผย localhost กับอินเทอร์เน็ตผ่านการสร้างช่องสัญญาณ (โดยใช้ ngrok): ข้อผิดพลาด HTTP 400: คำขอไม่ถูกต้อง; ชื่อโฮสต์ไม่ถูกต้อง


210

จากคำถามรุ่นก่อนหน้ามี: สิ่งนี้เรียกดูเว็บไซต์ที่มีที่อยู่ ip มากกว่า localhostซึ่งสรุปสิ่งที่ฉันทำไปมาก ... ฉันได้ทำงานในท้องถิ่นของ IP แล้ว จากนั้นฉันก็พบ ngrok และเห็นได้ชัดว่าฉันไม่จำเป็นต้องเชื่อมต่อผ่าน IP


สิ่งที่ฉันพยายามทำคือการเปิดเผยเว็บไซต์ของฉันทำงานบน localhost กับอินเทอร์เน็ต ฉันพบเครื่องมือที่จะทำสิ่งนี้: ngrok

ใช้งานเว็บไซต์ใน visual studio เว็บไซต์เริ่มต้นที่ localhost / port # ฉันเรียกใช้คำสั่ง "ngrok http port #" ในบรรทัดคำสั่ง ดูเหมือนว่าทุกอย่างจะเริ่มต้นได้ดี ฉันสร้าง URL ขึ้นมาสองสามอันและ URL การตรวจสอบ ngrok (localhost: 4040)

ปัญหาเดียวคือเมื่อฉันไปที่ URL ที่สร้างขึ้นฉันได้รับข้อผิดพลาด HTTP 400: คำขอชื่อโฮสต์ไม่ถูกต้องไม่ถูกต้อง นี่เป็นข้อผิดพลาดที่แตกต่างจากเมื่อฉันเรียกใช้ "ngrok http misport #" ซึ่งเป็นโฮสต์ที่ไม่พบข้อผิดพลาด ... ดังนั้นฉันจึงคิดว่าสิ่งที่ดีกำลังเกิดขึ้น ฉันแค่บอกอะไรไม่ได้ ...

มีขั้นตอนที่ฉันขาดหายไปในการเปิดเผยไซต์ของฉันไปยังอินเทอร์เน็ตผ่านบริการทันเนลหรือไม่? หากมีฉันไม่พบในเอกสารประกอบ ngrok

คำตอบ:


564

แก้ไขปัญหานี้ด้วย ngrok ในคำพูดที่ไม่สามารถแก้ไขได้บางแอพพลิเคชั่นจะโกรธเมื่อเห็นส่วนหัวของโฮสต์ที่แตกต่างจากที่คาดไว้

การรันคำสั่งต่อไปนี้ควรแก้ไขปัญหา:

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

3
ขอบคุณ ก่อนหน้านี้ฉันทำตามคำแนะนำจาก Devin Rader โดยละเอียดที่นี่ แต่ตอนนี้ทำให้วิธีนี้ง่ายขึ้น twilio.com/blog/2014/03/…
sobelito

วิธีนี้ยังใช้งานได้หากคุณมีปัญหาในการเพิ่มการเชื่อมโยงอื่นให้กับ applicationHost.config (vs2015 / iisexpress) คุณไม่จำเป็นต้องเพิ่มเพียงใช้คำตอบนี้ สุดท้ายหากคุณชำระเงินสำหรับโดเมนที่กำหนดเองเพื่อหลีกเลี่ยงการเปลี่ยนที่อยู่ทุกครั้งเพียงเพิ่ม -subdomain = mysubdomain ไปยังคำตอบด้านบน
เทรเวอร์

4
ไม่สามารถลงคะแนนมากพอ! สำหรับคำแนะนำที่ซับซ้อนและมีข้อผิดพลาดในการแฮ็คการเชื่อมโยง IISExpress และการตั้งค่าเครือข่ายของคุณสิ่งนี้จะตัดผ่านทุกอย่างเช่นมีดร้อน ๆ ผ่านเนย
Neil Laslett

19
เมื่อ local อยู่บน https แทนที่จะเป็น http ดังนั้นรูปแบบของการทำงานด้านบนนี้:ngrok http https://localhost:44362 -host-header="localhost:44362"
35917

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
Mark 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

นี่เป็นวิธีที่ถูกต้องในการเขียนส่วนหัวใน ngrok ไม่มีคำตอบอื่นใดที่ใช้งานได้ มีการตั้งค่า IIS ให้เป็นชื่อโฮสต์ใด ๆ แต่ ngrok ส่งคืน "ชื่อโฮสต์ไม่ถูกต้อง" เมื่อใช้ -host-header = "localhost: 8892" อย่างไรก็ตามรุ่นที่เขียนใหม่นี้ทำงานได้ทันที
Tyeth


0

สิ่งที่ง่ายที่สุดสำหรับฉันคือการใช้iisexpress-proxy + ngrok

ก่อนอื่นฉันติดตั้งiisexpress-proxyทั่วโลกด้วย npm

npm install -g iisexpress-proxy

จากนั้นฉันใช้งาน localhost กับมัน พูดเช่นเว็บไซต์ของฉันทำงานอยู่3003พูดเช่นเว็บไซต์ของฉันทำงานอยู่ใน

iisexpress-proxy 3003 to 12345 ที่ไหน 12345 http พอร์ตใหม่ที่ฉันต้องการพร็อกซี่

จากนั้นฉันก็สามารถเรียกใช้ ngrok ได้

./ngrok.exe http 12345

มันใช้งานได้! 😃

httpแต่ฉันคิดว่ามันทำงานได้เฉพาะกับ ตอนนี้ฉันไม่ได้ใช้httpsในการทดสอบ แต่ถึงแม้ว่ามันจะได้ผลก็มักจะเป็นงานจำนวนมากเสมอ


-7

ขั้นตอน

  1. เรียกใช้คำสั่งบนคอนโซลของคุณจากไดเรกทอรี ngrok.exe ngrok http port เช่น ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Set

  2. Ngrok url ไปยังแอปของคุณ

มันจะสร้างอุโมงค์ให้แอปพลิเคชันของคุณ

ขอบคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.