あらゆる種類のWebアプリを使用するのはまったく新しいものであり、Facebook Messenger Botをゆっくりと構築しようとしています。 ngrokを使用しようとすると、指定されたアドレスにアクセスできません、つまり:
ngrok http 5000
私がコマンドラインに入れているものであり、これが返されています:
ngrok by @inconshreveable
Session Status online
Version 2.1.18
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://ea986ca5.ngrok.io -> localhost:5000
Forwarding https://ea986ca5.ngrok.io -> localhost:5000
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
しかし、Facebook開発者のページで要求されているアドレス ' https://ea986ca5.ngrok.io 'を取得すると、次のように表示されます。
The connection to http://ea986ca5.ngrok.io was successfully tunneled to your
ngrok client, but the client failed to establish a connection to the local
address localhost:5000.
Make sure that a web service is running on localhost:5000 and that it is a
valid address.
The error encountered was: dial tcp [::1]:5000: connectex: No connection
could be made because the target machine actively refused it.
ローカルポートに問題がありますか?ありがとう!
これは私のために働いた
ngrok.exe http -Host-header = rewrite localhost:
例:ngrok.exe http -Host-header = rewrite localhost:5219
Visual Studio 2017を使用しているImは、何か影響があるかどうかわかりません。
@ njzk2が言ったように、Webサーバーが実行されていない場合は動作しません。あなたがまだ混乱している場合、私はあなたにそれを明確にしたいと思います。
ngrokは、ローカルサーバー(localhost上で実行)を外部(インターネットの残りの部分)で使用できるようにすることです。それ自体は、Webサーバーではありません。したがって、ボットの開発には、定義されたポート(この場合は5000)で実行されているWebサーバーが必要です。次に、ngrokをこのポートにポイントして、パブリックアドレスに送信された要求をそのポートで実行されているプログラムにリダイレクトできるようにします。 Webサーバーは、Facebookからのリクエストを受け入れて処理します
以下のようにしてください:
ngrok http 127.0.0.1:8080 -Host-header="127.0.0.1:8080"
私の場合、それはVisual Studio 2017のプロジェクトでした。NetCore 2.1は、自己署名証明書でhttpsを使用するために作成されました。 localhostをhttpsにする必要がない場合は、新しいWebプロジェクトを作成し、httpsのチェックを外してください。 ngrok(ngrok http port-number-from-IISExpress)を実行すると、開発に使用できるhttps URLが提供されます。
Ngrokを使用してhttps localhost URLを指すようにする場合は、プロキシをセットアップします。
このgithubの問題のコメントを参照してください:
https://github.com/inconshreveable/ngrok/issues/448#issuecomment-414214242
私にとっては、安全な接続のみを転送しているため、プロトコルをhttp
からtls
に切り替えることはできました。ヘッダーを書き換える必要はありませんでした。
コンテキストのために、Ubuntu 16で実行中のdockerコンテナーに接続を転送しています。
PS:tlsではなく、ブラウザーでhttpsを使用してアドレスにアクセスします。
Localhost IPを明示的に設定してみてください。
ngrok http 127.0.0.1:5000
の代わりに ngrok http 5000
幸運を!
このエラーは、HTTPをHTTPSにリダイレクトするHTTPルールがある場合に発生する可能性があります。
開発者のマシンでこれを無効にするか、X-Original-Host
ヘッダーに基づいてカスタムルールを追加できます。
IIS rewriteプラグインを使用しています。これが修正方法です
<rule name="Redirect to https" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" negate="false" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" />
<add input="{HTTP_X_Original_Host}" pattern="yourngrokname.ngrok.io" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Found" />
</rule>