Theiaを隠してみた


せっかく入れたTheiaですが、クラウドやVPSにそのままで入れたのではセキュリティ上の問題になります。そこで、Apacheにリバースプロキシを設定して、Apache を経由してアクセスするように配置しました。そのうえで認証やSSLを設定して、セキュリティを確保する狙いです。
Apacheの導入に特別なことはないので、本稿では導入後の設定について記載します。

認証設定

まずは認証設定からです。今回はDigest認証にしました。

sites-available/000-default.conf

<Location "/">
  AuthType Digest
  AuthName "DigestAuth"
  AuthUserFile /etc/apache2/.digestauth
  Require valid-user
</Location>

リバースプロキシ設定

次にリバースプロキシ設定です。
Theiaはyarn theia start ~/workspaceのように起動させるものとします。そうするとデフォルトのホスト名localhost、ポート3000で起動します。
TheiaへアクセスするURLをhttp://example.com/theia/とします。TheiaはWebSocketを使った通信も行うため、それについての設定も追加します。

mods-available/proxy.conf

ProxyPass /theia/services/ ws://localhost:3000/services/
ProxyPassReverse /theia/services/ ws://localhost:3000/services/
ProxyPass /theia/ http://localhost:3000/
ProxyPassReverse /theia/ http://localhost:3000/

/theia/services/を/theia/よりも前に設定しないと、全部/theia/で設定した方に持っていかれてしまいます。

SSLの場合

SSLの導入自体はいくつか方法がありますが、今回はLet's Encryptを利用しました。
導入はコマンドで行い、設定ファイルも書き換えてくれます。その結果、以下のようになっていることを確認してください。

httpでアクセスしたときにhttpsにリダイレクトする。

sites-available/000-default.conf

RewriteEngine On
RewriteRule ^ https://%{SEVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

SSLの場合の認証設定

sites-available/000-default-le-ssl.conf
自動的に作られている設定ファイル中に、000-default.confと同じ認証設定が記載されているはずです。

<Location "/">
  AuthType Digest
  AuthName "DigestAuth"
  AuthUserFile /etc/apache2/.digestauth
  Require valid-user
</Location>

しかし、これでは終わらなかった...

これで、httpでアクセスしてもhttpsにリダイレクトされ、ID/PWの入力ダイアログも表示されて「よしよし」と思ったのですが。。。
PCだとその通り動くものの、iPadだとTheiaにアクセスしたあと、スピナーがくるくるするばかりで何も表示されませんでした。
そう、Theia導入のきっかけはiPadでの開発環境構築です!折れ気味の気持ちを抱えつつ、旅は続くのでした。