sibリバースプロキシは、アクセスを代行して受け取るサーバーだ。wikipediaから引用すると、以下のような説明になる。proxy)または逆プロキシは、特定のサーバへの要求を必ず経由するように設置されたプロキシサーバ。一般的なプロキシとは異なり不特定多数のサーバを対象としない。リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、応答を肩代わりすることにより特定のサーバの負担を軽減したり、アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられる。node.jsでアプリを作成しforeverで永続化した場合、xxx.xxx.xx:3000などと最後にポート番号がついてしまう、これがとても気になっており、nginxでリバースプロクシを入れてアプリごとサブドメイン運用をしようとしたきっかけとなった。サブディレクトリの方にも入れることができるので簡単な実験とかはそちらの方がいいのかもしれない。nodeには動的な物を任せ、静的な部分についてはnginxで取り扱う形のほうがパフォーマンスから見ても良いようだ。それとリバースプロクシはwebsocketを通さないのでnginx_tcp_proxy_moduleを使用して動かす方法も書いておく。使用しているのは、以前作ったタッチ共有アプリだ。これをさくらのVPSサーバーへ持ってきて諸処の作業を行った。nginx_tcp_proxy_moduleでnode.jsのsocket.ioをリバースプロクシさせるnginx_tcp_proxy_moduleのインストールは以前のエントリの通りだ。設定方法は次のブログ記事を参考にさせて頂いた。入れてnode.jsのsocket.ioを動かすnginxの設定モジュール設定はtcpブロックで行うがhttpブロックとたいして変わりがない。/usr/local/nginx/conf/tcps以下にtcp設定を置きnginx.confからincludeする形にした。・・・・}includeしたtcp_cotouch.confはこのような内容であり、3000ポートでnodeアプリを動かし、サイトに3001で接続するとちゃんと動くのを確認できた。}}ところで、ソケット通信は、こちらの説明でも書いてある通り、IPアドレスとPort番号を一組とした通信手段となる。「ソケット」というのはIPアドレスとPort番号を一組にしたものに結び付けられた仮想メモリ空間なのです。「Socket」ライブラリの中の「socket」プログラムが相手アプリケーションとデータの通信を行ってくれるのです。[[Portが一つ占有されることになる]]はずだと思いながら、tcpとhttpで同じポート番号を指定すると、動いてしまった。別々のポートを指定していた時とは違い引っかかりがある。いうことなのだろうと思いnginxを停めてinit.dで再起動しようとするとポートが使われていて動かせないと出てくる。restart前の時は、設定ファイルのリロードだったのを思い出し、nginx.confでtcpとhttpのポート指定を書き換えた上でnginxを機動、tcpとhttpのポート指定を同じにした上で下記のコマンドで設定リロードする。reloadそうすると同じポートで動いてしまった。ここで、エラーログを確認しようとした。/usr/local/nginx/logs/error.logすると重くて開くのにとんでもなく時間が掛かる。ソケットとhttpの接続とで混乱が起きていた模様で大量のエラーが発生していた。これで同じポート指定はやはり出来ないことが分かった。念の為にtcpブロックで同じポート指定で2つ動かそうとしてみたら、先に書かれていたものが優先され、default_serverの指定が後のサーバにあった場合、既に使われているというエラーが出る。このため、やはりtcpのserverブロックは1ポート専有というのを再確認することができた。nodeアプリをhttpブロックでリバースプロキシsoket.ioでの接続は現段階ではリバースプロキシしてもあまり意味が無いので、これまでのようにポート指定で行うことにして、ソケットとは関係のないnodeアプリ本体の部分にリバースプロキシを使いURLにポート番号が出ないようにすることにした。soket.ioと本体のポート番号を変えるのは下記の記事を参考にさせていただいている。URLnodeアプリでは、このように本体を3001、ソケットを3002として指定しなおしている。require('socket.io').listen(app);appではなくポート番号指定と変えている。function(socket){・・・・html部分だと、index.htmlでsocket.io.jsを指定する部分をポート番号付きに変更する。src="http://www.omusuhi.info:3002/socket.io/socket.io.js"></script>socketを使うクライアント側jsファイルの方でもsocket.io側のポート指定へと変える。});・・・・}Nodeアプリの変更点は以上となる。次にnginxでリバースプロキシの設定を行った。参考にさせていただいたのは、主にこちらのサイトだ。リバースプロキシとして使ってみたnginxでリバースプロキシ。プロキシ共有設定ファイルを上記サイトを見つつ、このような感じで書き、projects/proxy.confへと保存した。1m;また、今回のアプリのプロキシ設定を下記のように書き、projects/cotouch.confへと保存してある。}}前回のエントリで、projectsディレクトリにあるものは読みこむようにしてあったので、proxy.confもcotouch.confもnginx起動時に自動的に読み込まれることになる。/usr/local/nginx/conf/projects/*.conf;}ここまで変更してから、nginxの再起動を行う。restartすると、ちゃんとサブドメインでアプリが動き、さらに2枚同時に立ち上げると同期しているのも確認できた。cotouch.omusuhi.infoこれで、複数のNodeアプリがあってもnginx側で管理できるようになった。次はphp-fpmでphpを動かしてみたい。余裕ができたらwordpressもnginxでどれだけパフォーマンスが良くなるのか試してみたいと考えている。Comment返信をキャンセルする。