ローカルホストをトンネリング(ngrokを使用)経由でインターネットに公開:HTTPエラー400:不正なリクエスト。無効なホスト名


210

以前のバージョンの質問から、これがあります:localhostではなく、IPアドレスを使用してWebサイトを参照します。これは、これまでに行ったことのほとんどを概説しています...ローカルIPが機能しています。その後、ngrokを見つけました。どうやらIP経由で接続する必要はありません。


私がやろうとしているのは、ローカルホストで実行している私のウェブサイトをインターネットに公開することです。これを行うツールを見つけました:ngrok。

Visual StudioでWebサイトを実行すると、Webサイトはlocalhost / port#で起動します。コマンドラインで「ngrok http port#」コマンドを実行します。すべてがうまく起動するようです。いくつかのURLを生成し、ngrokインスペクションURL(localhost:4040)が機能します。

唯一の問題は、生成されたURLにアクセスすると、HTTPエラー400:不正なリクエスト、無効なホスト名が表示されることです。これは、ホストが見つからないというエラーである「ngrok http wrongport#」を実行したときとは異なるエラーです。何も言えない...

トンネリングサービスを介して自分のサイトをインターネットに公開するときに、足りないステップはありますか?存在する場合、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を追加するだけです。
trevorc

4
これは十分に賛成できません!IISExpressバインディングとネットワーク設定をハックするための複雑でバグの多い手順については、これはバターを使ったホットナイフのようにすべてを切り抜けます。
Neil Laslett、2018年

19
上記作品のローカルは、httpではなくhttpsであり、このバリエーション:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
うわー、私はこれを見つけるためにほぼ2時間無駄にした。私の唯一の問題は、-host-headerにhttpsを追加することでした。このように:ngrok http https://localhost:44392 -host-header="https://localhost:44392" -host-headerパラメータからhttps://を削除すると、問題が解決しました。ありがとう
Dave

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はすでに任意のホスト名に設定されていますが、-host-header = "localhost:8892"を使用すると、ngrokは「hostname invalid」を返しましたが、この書き換えバージョンはすぐに機能しました。
Tyeth


0

私にとって最も簡単なことは、iisexpress-proxyを使用することでした + ngrokでした。

最初にiisexpress-proxynpmでグローバルにインストールします

npm install -g iisexpress-proxy

次に、ローカルホストをプロキシします。たとえば、私のサイトがで実行されているとし3003ます。

iisexpress-proxy 3003 to 12345 どこ 12345プロキシしたい新しいhttpポートはですか。

その後、ngrokを実行できます。

./ngrok.exe http 12345

うまくいきます!😃

しかし、それはでのみ機能すると思いますhttp。現在、私はhttpsテストに使用していませんが、動作しても、通常はいつものように多くの作業です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.