April 20, 2013

FuelPHP x RatchetをNginx + Apacheで動かす

JSでRatchetへのコネクションをオープンする時
new WebSocket("ws://example.com:1337");
のようにポート番号を指定しますが、これを消したいなーと。

Ratchetドキュメント http://socketo.me/docs/deploy にはHAProxyの記載がありますが、NginxのWebSocket Proxyでやってみました。尚、使用したNginxは最新の1.3.16です。


1. Apacheのポートを変更
* Nginxにポート80を使用させたいので、Apacheのポートを変更します。
http://madroom-project.blogspot.jp/2013/04/ubuntuapache.html
* 併せて、ApacheへのアクセスをNginxからのみに制限するには /etc/apache2/sites-available/default でドキュメントルートに対して"allow from all"を"allow from 127.0.0.1"にします。

2. Nginxのインストール
* 最新バージョンが欲しいので、ソースからインストールします。
$ wget http://nginx.org/download/nginx-1.3.16.tar.gz
$ tar xzvf nginx-1.3.16.tar.gz
$ cd nginx-1.3.16/
$ ./configure
$ make
$ sudo paco -D make install
$ nginx -v
nginx version: nginx/1.3.16
3. /usr/local/nginx/conf/nginx.conf を編集
* とりあえず http://nginx.org/en/docs/http/websocket.html を参考にしました。
* "location /"は、全てApacheに向けます。
* 以下、Ratchetのポートを1337、Apacheのポートを8000とします。
$ diff /usr/local/nginx/conf/nginx.conf.default /usr/local/nginx/conf/nginx.conf
42a43,49
>         location /socket/ {
>             proxy_pass http://127.0.0.1:1337;
>             proxy_http_version 1.1;
>             proxy_set_header Upgrade $http_upgrade;
>             proxy_set_header Connection "upgrade";
>         }
>
43a51,52
>             proxy_pass http://127.0.0.1:8000;
>
4. Nginxを起動
$ sudo nginx

# 停止は以下
$ sudo nginx -s stop
無事、JSで以下の形で接続出来ました。
new WebSocket("ws://example.com/socket/");
その他、設定すべき項目は有るのかもしれませんが、とりあえず、最小限の手順はこんな感じなのかなと。

(タイトルにFuelPHPとつけたけど全然関係なかったな。。。)


関連:
FuelPHPでWebSocketを扱うパッケージを作りました
http://madroom-project.blogspot.jp/2013/04/fuelphpwebsocket.html

No comments:

Post a Comment