LoginSignup
1
1

More than 1 year has passed since last update.

フォワードプロキシで守られたNW内でngrokを使用する

Last updated at Posted at 2021-12-08

最近、久しぶりにWebアプリ開発の試行錯誤をする機会があり、その時に知った便利ツールの紹介とそのツールに関するトラブルシューティングです。

Problem

開発マシン上で開発中のWebアプリに、WWW経由でHTTPS通信を行いたい。
なお、「開発マシン」は会社の社内NW(あるいは学校のNWなど)に接続しており、あらかじめ決められたフォーワードプロキシを経由する以外にはWWWへのアクセスができない。

Solution

ngrok(えんぐろっく)というツールを使います。

ngrok はローカル環境で稼働するWebサーバーを動作検証などのためにWWW(インターネット)に公開するためのツールです。
これにより他のシステムや開発メンバーがWWWを経由して開発中のWebアプリにHTTP/Sでアクセスすることが可能になります。
公開には *.ngrok.io のサブドメインが利用され、* の部分には都度ランダムな値が設定されます。

またこのようなフォーワーディングの他にも、HTTP/S通信内容を解析したり、HTTP/S要求を再実行したりすることもできるようです。

具体的な手順は次の通り(フォーワードプロキシが介在しない環境であれば、手順3~6は不要です。):

  1. 開発マシンに Node.js をインストールする。直接インストールでも nvm 経由でも構わない。
  2. シェル/コマンドプロンプトで次のコマンドを実行する: npm install -g ngrok
  3. ngrok のサイトでサインアップする。
  4. ダッシュボードの Your Authtoken で認証トークンを取得する。 image.png
  5. ngrokのリファレンス Default configuration file location を参考にして所定の場所に次のファイルを作成する: ngrok.yml image.png
  6. テキストエディタで ngrok.yml を開き authtokenhttp_proxyのキー/値をYML形式で記述する: image.png
  7. 開発中のWebアプリを起動し、開発サーバー上でHTTPリクエストを待ち受ける状態にする(例: http://localhost:8080)。
  8. シェル/コマンドプロンプトで次のコマンドを実行する: ngrok http ポート番号 (例: ngrok http 8080
  9. シェル/コマンドプロンプトに次のように表示されるのを待つ: image.png
  10. Forwarding 欄に表示されたURLを使い、Webブラウザでアクセスする。

ところで、、、
この記事を執筆している時点(2021/12/08)で、Chromeブラウザを使って ngrok で作成されたURLにアクセスをすると、以下のような警告画面が表示されてしまいます:
image.png

FirefoxやEdgeなど他のブラウザでは問題ありません。
この画面そのものについては「詳細」→「安全でないこのサイトにアクセスする」をクリックするとアクセスを続行できますが、この警告内容を見ていると ngrok 経由のアクセスがセキュリティ対策ツールなどにより遮断されてしまうケースもありそうに思えます。。

Background

Webアプリ(WebAPIも含む)を開発するとき、単にWebアプリを作って動かせばよいのであれば比較的シンプルですが、そのWebアプリに別のアプリからHTTPSリクエストで接続する必要がある場合は厄介です。

本番稼動のためのWebサーバーであれば、(LBやWAFなどの介在の有無はともかく)WWWに公開されているでしょうし、SSL証明書もインストール済みでしょう。
しかし、ふつう開発マシンはWWWに公開しませんし、SSL証明書のインストールもしません。

ngrok (えんぐろっく)というツールを使えばこのような問題が解決します。都度発行されるランダムなドメインを使って、開発サーバーを一時的にWWWに公開することができるのです。

ところで ngrok を使う場合に会社や学校のNWで利用されることの多いフォーワードプロキシが障壁になります。前述の手順のうち3~6を実行しないと、このプロキシにより ngrok の動作が妨げられてしまいます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1