the glue

やってみたことで忘れそうなこと、役立ちそうなことなどをまとめています。たまに何気ない日常の話もします。

Raspberry Pi に nginx をインストールしたときのメモ

用意したもの

  • Raspberry Pi model B

今買うなら Raspberry Pi2 model Bがいいですかね

自分は初代model Bしか持っていませんが、シングルコアのmodel Bだとそれなりに時間がかかります。

経緯

  • nginxをWebSocketのリバースプロキシとして使いたい
  • Raspberry Pi(Raspbian)でnginxを使いたい
  • 普通にapt-getでインストールしたらv1.2.1だった(WebSocketのリバースプロキシに非対応)

やること

作業

  1. apt-getで入れたnginxを削除する
    $ sudo apt-get remove nginx

  2. nginx公式リポジトリの鍵を登録する
    $ wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
    始めはバイナリが入ると思ったからやったけどどうせビルドするならいらないかも

  3. nginx公式のリポジトリを登録する
    $ sudo sh -c 'echo "deb http://nginx.org/packages/debian/ wheezy nginx" >> /etc/apt/sources.list'
    $ sudo sh -c 'sudo echo "deb-src http://nginx.org/packages/debian/ wheezy nginx" >> /etc/apt/sources.list'

  4. インストール
    arm用のパッケージが配布されていないので、ソースからビルドしてパッケージをつくっちゃう

$ sudo apt-get update
$ sudo apt-get build-dep nginx
$ sudo apt-get source nginx
$ cd nginx-1.6.2 # バージョンに応じて
$ sudo dpkg-buildpackage -uc -b
$ sudo dpkg -i nginx_1.6.2-1~wheezy_armhf.deb

参考

nginx: Linux packages

nginxをWebSocketのリバースプロキシとして使う

経緯

  • WebSocketを使ったアプリケーションを作ったが、ポートが80しか使えない
  • nginxでどっちも80に流したい

ポイント / はまり所

  • WebSocketのプロキシにはUpgradeヘッダ(HTTP 1.1)への対応が必要
  • Upgradeヘッダへの対応は nginx v1.3.13以降
    参考: WebSocket proxying
  • 厳しい条件から先に書く
  • デフォルトだと30秒通信がないと切断される(!)

nginxでリバースプロキシしているときだけ一定時間で接続が切れるので何かと思えば、
普通のHTTPの通信と同様に30秒(だったはず)通信がなかった場合はタイムアウトってことで自動でコネクションを切ってくれていたみたい。
ping/pongを30s以内にやればいいんだろうけど、とりあえず5分に設定。

config

server {
    listen *:80 default_server;
    proxy_read_timeout 5m;

    location /ws {
        proxy_pass http://127.0.0.1:3000/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}