Cloud 9上には、Cloud 9上で起動しているWebサーバーに外部からアクセスする機能があります。
要件に
アプリケーションはポート 8080、8081、または 8082 を経由して HTTP プロトコルを使用して実行している。
とあるのですが、8080番ポートと8081番/8082番ポートを使用した場合の動作が異なりましたので記録しておきます。
実験した環境は、パブリックサブネットで起動したCloud 9で、セキュリティグループのインバウンドルール未設定(全拒否)状態です。
8080番ポートでサーバー起動した場合
docker run -it --rm -p 8080:80 nginx
この状態で、上部のPreview
メニューのPreview Runninng Application
をクリックします。
すると、IDE内でブラウザっぽいタブが開き、Webサーバーからのレスポンスが表示されます。
さらに、Browser
ボタンの右側のアイコンをクリックすると、別のタブが開いてNginxの画面が表示されます。
別タブで開いたURLでアクセスが可能なのは、Cloud 9にアクセスしているユーザーセッションがあるブラウザのみのようです。
なので、ChromeでCloud 9にアクセスしている場合はChromeでのみアクセス可能です。
シークレットモードやFirefoxではアクセスできません。
どういう仕組みなんだろう。。
8081番ポートでサーバー起動した場合
同じ手順を8081番ポートでやってみます。
docker run -it --rm -p 8081:80 nginx
すると、画面いっぱいのOops
8082番ポートを使った場合も同様です。
8081番ポートの使い方
色々試してわかったのですが、ポート番号を明示的に指定すると、同じ番号のサービスに繋がるということがわかりました。
なので、8081番ポートで起動しているサービスに接続したい場合は、https://aaaaaaaaaaaaaaaaaaaaaaa.vfs.cloud9.us-east-1.amazonaws.com:8081/
のように指定します。
(ブラウザ部分のURLが/
と、ドメインとポートの部分が省略されますが、8081を指定しています)
接続はHTTPS通信ですので、未指定時(=443番ポート使用時)のみ、8080に上手に転送されるようになっているようです。
まとめると
条件 | 接続先サービス |
---|---|
ポート番号未指定 | 8080で起動しているサービス |
443 を指定 |
8080で起動しているサービス |
8080 を指定 |
8080で起動しているサービス |
8081 を指定 |
8081で起動しているサービス |
8082 を指定 |
8082で起動しているサービス |
ちなみに、8083など、8080~8082以外のポートは全ブロックされているように思います。
おまけ
8080~8082までの3つは自由に使えるので、以前紹介した、Cloud 9 でVSCodeを使うで一つポートを使っても、まだWebアプリを起動させる余裕ができます。
Cloud 9 でVSCodeを使うの実用化(?)に一歩近づきました😁