nodeをデーモン化してnginxをリバースプロキシとして連動させる

Node.jsアプリをNginxと連動させてみます。

やることは2つ

・node.jsをデーモン化します。

・nginxをリバースプロキシとして稼働させます。

nginxにリバースプロキシとして設定をする

conf.dのhoge.com.confをを設定する

#vi conf.d/hoge.com.conf

upstream backend_node {
 ip_hash;
 server 127.0.0.1:3000;
}

server {
 listen 80;
 server_name hoge.com;
:
:
 #---- To redirect setting
proxy_redirect off;
proxy_set_header Host $http_host;
localhostをnginxが受け取ったリクエストのホスト名に書き直す
proxy_redirect default;でこの設定なしだと、どこからきてもlocalhostになってしまう(^^;

proxy_set_header X-Real-IP $remote_addr;
アプリケーション層の情報。
ロードバランサやプロキシを経由する時に送信元を判別するために利用。
x-real-ipにクライアントIPを設定してAPIへ渡す。
$remote_addrはアクセス元のIP。ネットワーク層の情報。
基本的に直前のIPを保持している。

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
アプリケーション層の情報。
ホスト名を渡す

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
アプリケーション層の情報。
ロードバランサやプロキシを経由する時に送信元を判別するために利用。
x-forwarded-forのIPアドレスをAPIへ渡す。

prosy_set_header X-NginX-Proxy true;
:
:
 location / {
  root /opt/www/ngxtst.kumakake.com/html;
  index index.html index.htm;
# 存在するファイルパスが指定された時はnginxで処理する
  if ( -f $request_filename ) {
   break;
  }
# ファイルパスが存在しない時はbackend_nodeで処理する
  if ( !-f $request_filename ) {
   proxy_pass http://backend_node;
   break;
  }
 }

※ifディレクティブはifと(の間は空白をあけること
if ( xxxx
if( xxxとすると
nginx: [emerg] unknown directive "prosy_set_header" in /etc/nginx/conf.d/hoge.com.conf:21
って怒られます(^^;

nodeをforeverでデーモン化する

foreverをnpmでインストールします

# npm install forever -g

/usr/local/bin/forever -> /usr/local/lib/node_modules/forever/bin/forever
/usr/local/lib
`-- forever@0.15.3
 +-- cliff@0.1.10
 | +-- colors@1.0.3
 | `-- eyes@0.1.8
 +-- clone@1.0.2
 +-- colors@0.6.2
 +-- flatiron@0.4.3
 | +-- broadway@0.3.6
 | | +-- cliff@0.1.9
 | | `-- winston@0.8.0
 | +-- director@1.2.7
 | +-- optimist@0.6.0
 | `-- prompt@0.2.14
 | +-- read@1.0.7
 | | `-- mute-stream@0.0.7
 | `-- revalidator@0.1.8
 +-- forever-monitor@1.7.1
 | +-- chokidar@1.7.0
 | | +-- anymatch@1.3.0
 | | | +-- arrify@1.0.1
 | | | `-- micromatch@2.3.11
 | | | +-- arr-diff@2.0.0
 | | | | `-- arr-flatten@1.0.3
 | | | +-- array-unique@0.2.1
 | | | +-- braces@1.8.5
 | | | | +-- expand-range@1.8.2
 | | | | | `-- fill-range@2.2.3
 | | | | | +-- is-number@2.1.0
 | | | | | +-- isobject@2.1.0
 | | | | | +-- randomatic@1.1.7
 | | | | | | +-- is-number@3.0.0
 | | | | | | | `-- kind-of@3.2.2
 | | | | | | `-- kind-of@4.0.0
 | | | | | `-- repeat-string@1.6.1
 | | | | +-- preserve@0.2.0
 | | | | `-- repeat-element@1.1.2
 | | | +-- expand-brackets@0.1.5
 | | | | `-- is-posix-bracket@0.1.1
 | | | +-- extglob@0.3.2
 | | | +-- filename-regex@2.0.1
 | | | +-- kind-of@3.2.2
 | | | | `-- is-buffer@1.1.5
 | | | +-- normalize-path@2.1.1
 | | | | `-- remove-trailing-separator@1.0.2
 | | | +-- object.omit@2.0.1
 | | | | +-- for-own@0.1.5
 | | | | | `-- for-in@1.0.2
 | | | | `-- is-extendable@0.1.1
 | | | +-- parse-glob@3.0.4
 | | | | +-- glob-base@0.3.0
 | | | | `-- is-dotfile@1.0.3
 | | | `-- regex-cache@0.4.3
 | | | +-- is-equal-shallow@0.1.3
 | | | `-- is-primitive@2.0.0
 | | +-- async-each@1.0.1
 | | +-- glob-parent@2.0.0
 | | +-- inherits@2.0.3
 | | +-- is-binary-path@1.0.1
 | | | `-- binary-extensions@1.8.0
 | | +-- is-glob@2.0.1
 | | | `-- is-extglob@1.0.0
 | | `-- readdirp@2.1.0
 | | +-- graceful-fs@4.1.11
 | | +-- readable-stream@2.2.11
 | | | +-- core-util-is@1.0.2
 | | | +-- isarray@1.0.0
 | | | +-- process-nextick-args@1.0.7
 | | | +-- safe-buffer@5.0.1
 | | | +-- string_decoder@1.0.2
 | | | `-- util-deprecate@1.0.2
 | | `-- set-immediate-shim@1.0.1
 | +-- minimatch@3.0.4
 | | `-- brace-expansion@1.1.8
 | | +-- balanced-match@1.0.0
 | | `-- concat-map@0.0.1
 | `-- ps-tree@0.0.3
 | `-- event-stream@0.5.3
 | `-- optimist@0.2.8
 +-- nconf@0.6.9
 | +-- async@0.2.9
 | +-- ini@1.3.4
 | `-- optimist@0.6.0
 +-- nssocket@0.5.3
 | +-- eventemitter2@0.4.14
 | `-- lazy@1.0.11
 +-- object-assign@3.0.0
 +-- optimist@0.6.1
 | +-- minimist@0.0.10
 | `-- wordwrap@0.0.3
 +-- path-is-absolute@1.0.1
 +-- prettyjson@1.2.1
 | +-- colors@1.1.2
 | `-- minimist@1.2.0
 +-- shush@1.0.0
 | +-- caller@0.0.1
 | | `-- tape@2.3.3
 | | +-- deep-equal@0.1.2
 | | +-- defined@0.0.0
 | | +-- jsonify@0.0.0
 | | +-- resumer@0.0.0
 | | `-- through@2.3.8
 | `-- strip-json-comments@0.1.3
 +-- timespan@2.3.0
 +-- utile@0.2.1
 | +-- async@0.2.10
 | +-- deep-equal@1.0.1
 | +-- i@0.3.5
 | +-- mkdirp@0.5.1
 | | `-- minimist@0.0.8
 | +-- ncp@0.4.2
 | `-- rimraf@2.6.1
 | `-- glob@7.1.2
 | +-- fs.realpath@1.0.0
 | +-- inflight@1.0.6
 | | `-- wrappy@1.0.2
 | `-- once@1.4.0
 `-- winston@0.8.3
 +-- cycle@1.0.3
 +-- isstream@0.1.2
 +-- pkginfo@0.3.1
 `-- stack-trace@0.0.10

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/forever/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.2: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”linux”,”arch”:”x64″})

# which forever
/usr/local/bin/forever

起動します

$ forever start www
warn: –minUptime not set. Defaulting to: 1000ms
warn: –spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info: Forever processing file: www

状態を確認します

$ forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [0] ML5b /usr/local/bin/node www 23978 23984 /home/kumakake/.forever/ML5b.log 0:0:0:14.581

停止します

モジュール名を指定する
$ forever stop www
error: Forever cannot find process with id: www
uidを指定する
$ forever stop 23978
error: Forever cannot find process with id: 23978

状態を確認します

$ forever list
info: No forever processes running


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です