Tiếp xúc localhost với internet thông qua đường hầm (sử dụng ngrok): Lỗi HTTP 400: yêu cầu xấu; tên máy chủ không hợp lệ


210

Từ các phiên bản trước của câu hỏi, có câu này: Duyệt trang web với địa chỉ IP thay vì localhost , trong đó phác thảo khá nhiều những gì tôi đã làm cho đến nay ... Tôi đã làm việc IP cục bộ. Sau đó, tôi tìm thấy ngrok và dường như tôi không cần kết nối qua IP.


Những gì tôi đang cố gắng làm là để trang web của tôi chạy trên localhost ra internet. Tôi tìm thấy một công cụ sẽ làm điều này: ngrok.

Chạy trang web trong studio trực quan, trang web khởi động trên localhost / port #. Tôi chạy lệnh "ngrok http port #" trong dòng lệnh. Mọi thứ dường như bắt đầu tốt đẹp. Tôi tạo một vài URL và url kiểm tra ngrok (localhost: 4040) hoạt động.

Vấn đề duy nhất là khi tôi truy cập các URL được tạo, tôi gặp lỗi HTTP 400: tên máy chủ không hợp lệ yêu cầu không hợp lệ. Đây là một lỗi khác với khi tôi chạy "ngrok http misport #", đây là lỗi máy chủ không tìm thấy ... vì vậy tôi nghĩ điều gì đó tốt đang xảy ra. Tôi không thể nói gì ...

Có một bước tôi đang thiếu trong việc đưa trang web của tôi lên internet thông qua dịch vụ đường hầm? Nếu có, tôi không thể tìm thấy nó trong tài liệu ngrok.

Câu trả lời:


564

Troublehot vấn đề này với ngrok. Theo những từ không thể chấp nhận được, một số ứng dụng tức giận khi thấy một tiêu đề máy chủ khác so với dự kiến.

Chạy lệnh sau sẽ khắc phục sự cố:

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

3
Cảm ơn. Trước đây tôi đã làm theo hướng dẫn từ Devin Rader chi tiết ở đây, nhưng điều này bây giờ làm cho cách này dễ dàng hơn. twilio.com/blog/2014/03/...
sobelito

Giải pháp này cũng hoạt động nếu bạn gặp sự cố khi thêm một ràng buộc khác vào applicationhost.config (vs2015 / iothypress). Bạn không cần thêm một câu trả lời. Cuối cùng, nếu bạn đã trả tiền cho một tên miền tùy chỉnh để tránh thay đổi địa chỉ mỗi lần chỉ cần thêm -subdomain = mysubdomain vào câu trả lời ở trên.
trevorc

4
Không thể nâng cao điều này đủ! Đối với tất cả các hướng dẫn phức tạp và có lỗi để hack các ràng buộc và cài đặt mạng IISExpress của bạn, điều này cắt ngang tất cả giống như một con dao nóng xuyên qua bơ.
Neil Laslett

19
Khi cục bộ ở trên https thay vì http thì biến thể của các hoạt động trên:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
wow, tôi đã lãng phí gần 2 giờ để tìm ra cái này Vấn đề duy nhất của tôi là tôi đã thêm https trong -host-header. như thế này: ngrok http https://localhost:44392 -host-header="https://localhost:44392" loại bỏ https: // khỏi tham số -host-header đã giải quyết vấn đề của tôi. Cảm ơn
Dave

48

Lệnh sau sẽ khắc phục sự cố

ngrok http -host-header=localhost 8080

2
Nếu sử dụng ASP.NET Core, bạn cũng nên bình luận app.UseHttpsRedirection()trong lớp Khởi động của mình để tránh Chuyển hướng tạm thời 307.
Đánh dấu G

39

Điều này đã không làm việc cho tôi. bạn có thể làm như sau:

Đối với IIS Express

Trong VS 2015: Chuyển đến .vs\config\applicationhost.configthư mục trong dự án của bạn

Trong VS 2013 trở về trước: Chuyển đến %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Tìm các ràng buộc nói:

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

Đối với tôi đó là một dự án chạy trên cổng 5219

thay đổi nó thành

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

IIS Express sẽ chấp nhận tất cả các kết nối đến trên cổng đó.

Nhược điểm: bạn cần chạy IIS Express với tư cách quản trị viên.

hoặc bạn có thể viết lại tiêu đề máy chủ trong Ngrok:

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

Đây là cách chính xác để viết lại tiêu đề trong ngrok. Không có câu trả lời nào khác làm việc. Đã có IIS được đặt thành bất kỳ tên máy chủ nào, nhưng ngrok đã trả lại "tên máy chủ không hợp lệ" khi sử dụng -host-header = "localhost: 8892" tuy nhiên phiên bản viết lại này hoạt động ngay lập tức.
Tyeth

6

Đối với httpscông việc này:

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


0

Điều đơn giản nhất đối với tôi là sử dụng iothypress-proxy + ngrok.

Đầu tiên tôi cài đặt iisexpress-proxytoàn cầu với npm

npm install -g iisexpress-proxy

Sau đó, tôi ủy quyền localhost của tôi với nó. Ví dụ, trang web của tôi đang chạy 3003.

iisexpress-proxy 3003 to 12345nơi 12345là cổng http mới Tôi muốn proxy để.

Sau đó tôi có thể chạy ngrok trên nó.

./ngrok.exe http 12345

Nó chỉ hoạt động! 😃

Nhưng tôi nghĩ rằng nó chỉ hoạt động với http. Ngay bây giờ tôi không sử dụng httpsđể kiểm tra, nhưng ngay cả khi nó hoạt động, thường thì nó vẫn rất nhiều công việc như mọi khi.


-6

Các bước.

  1. Chạy lệnh trên bàn điều khiển của bạn từ thư mục ngrok.exe. cổng ngrok tức là ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Đặt

  2. Ngrok url vào ứng dụng của bạn.

Nó sẽ tạo ra một đường hầm đến ứng dụng của bạn.

Cảm ơn .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.