Elaboration in, Garbage out

Twitt*r ではメモできない何かそれ的なモノ・コトを

ipython notebook behind nginx

ipython notebook を nginx のリバースプロキシ経由で使おうとしたら,けっこー手こずったのでメモ.なんでそげなことするのか,っていうのは,通信路を暗号化させるためだけに SSL を設定するのに ipython notebook とか gitbukect ごとにオレオレ認証局たてるのはちょっとどうなのっていうことで,SSL の部分はすべて nginx にまるなげさせようって目的です.

環境

(ずっと同じだけど一応)

  • Ubuntu 14.04
  • nginx 1.6.2 (add-apt-repository ppa:nginx/stable で最新の安定版追加)
  • python 2.7.6
  • ipython 2.3.1
  • tornado 3.2.0 (pip で指定した)

症状

↓こんな感じでエラーがでる.

WebSocket connection failed

A WebSocket connection could not be established. You will NOT be able to run code. Check your network connection or notebook server configuration.

↓ここに載ってるやつ試してもダメだった.

解決方法

ここを読むと対処法が分かった.

で,設定例

location /ipython {
    # redirect
    proxy_pass http://localhost:9999;
    # setting for ipython
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Origin "http://localhost:9999";
}

WebSocket での,http ヘッダ?内?の? origin と host が違って?相違があると ipython/zmqhandlers.py at master · ipython/ipython · GitHub の 123 行目からのブロックの処理で弾いてる感満載,という感じらしい.

なんで origin と host とかが違うとダメやねん,ていうのは多分 WebSocket とか HTTP とかの勉強せなアカン感じ.ぐぬぬ

でもまだバグがある.

safari v8.0 ではやっぱりエラーが出ます.

ここみたら,tornado 3.2 を指定してるしーーなんだが,おかしい.chrome で動くからまーいーやってことで.