websocket-rails standaloneモードのサーバでSSL通信

websocket-railsを使ったところ、SSLのところでつまずいたのですがあまり情報もなかったのでメモしておきます。

動作環境

  • rails 4.1.0
  • websocket-rails 0.7.0

standaloneモード

  • githubのwikiに記載されているように、PassengerでRailsアプリを起動している場合には、Railsアプリとは別にサーバを起動する必要があります。

  • Standalone server mode

  • しかし、websocketを利用しているページのプロトコルがhttpsの場合、websocketのプロトコルもSSL通信にする必要があります。
    仮に、websocketを利用しているページのURL(ここではhttps://example.com/dashboardとする)にアクセスした場合、次のようなエラーが出力されます。

WebSocket connection to 'wss://example.com:3001/websocket' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR

standaloneモードのサーバにSSLの設定

  • gemに用意されているrakeタスクを使うと、thinが起動します。このままだとSSL通信できません。
bundle exec rake websocket_rails:start_server
  • SSL通信をできるようにするには、websocketのconfigurationで、thinの起動オプションに次の設定を行います。
  config.thin_options = {
    ssl: true,
    ssl_key_file: 'path_to_ssl_key_file',
    ssl_cert_file: 'path_to_ssl_cert_file',
    ssl_disable_verify: true,
  }

こちらを設定したあとに、rakeタスクでサーバを起動すればhttpsのサイトでも、standaloneモードのサーバで、websocketが利用できるようになりました。