Edited at

ApacheとNode.jsの共存

More than 5 years have passed since last update.

ApacheとNode.jsを共存させる方法。

さくらVPSでApacheで立てたサーバの他にNodeで立てたサーバが必要になったので、その作業のメモ。

ApacheやNode.jsは既にインストールされているものとする。

構成は以下の通り。

node-http-proxy (Port 80)


├─Apache (Port 8080) example.com, apache.example.com

└─Node.js (Port 8081) node.example.com

使用した環境


  • CentOS 6.5

  • node v0.10.29

  • npm 1.3.6

  • apache 2.2.15


1. rootユーザ以外にもポート80番の実行権を与える

80番はrootでないと使用できないため、任意のユーザ(ここではhogeとする)に実行権を与える。

任意のユーザの追加とグループをwheelに変更

$ useradd hoge

$ passwd hoge

$ usermod -G wheel hoge

追加したユーザのIDを調べる

$ id -u hoge

ここで吐出された番号(たぶん500)をメモっておく。


2. node-http-proxyの導入

npmでhttp-proxyをインストール。

npm install http-proxy

npm link http-proxy

proxyの設定。

$ vi proxy.js

var http = require('http');
var httpProxy = require('http-proxy');

var apacheProxy = new httpProxy.createProxyServer({
target: {
host: 'localhost',
port: 8080
}});

var nodeProxy = new httpProxy.createProxyServer({
target: {
host: 'localhost',
port: 8081
}});

var server = http.createServer(function ( req, res ) {
if (req.headers.host == 'example.com' || req.headers.host == 'apache.example.com') {
apacheProxy.web( req, res );
} else if (req.headers.host == 'node.example.com') {
nodeProxy.web( req, res );
} else {
res.writeHead(404);
res.end();
}
});

server.listen(80, function(){
process.setuid(500); //上記で設定したユーザID
});
console.log('It Works!');


3. iptablesの設定

iptablesを設定しているなら、サーバ内部でルーティングしているため、80ポートのみが通ればよく、8080や8081は通さなくてもいい。

$ vi  /etc/sysconfig/iptables

-A SERVICES -p tcp --dport 80 -j ACCEPT

これでOK.


4. httpd.confの設定

apacheで処理しているデフォルトのポートを80から8080に変更する。

$ vi httpd.conf 

NameVirtualHost *:8080
Listen 8080

Virtual Hostの設定をしているなら以下も。

<VirtualHost *:8080>

DocumentRoot /home/www/public
ServerName example.com
</VirtualHost>

<VirtualHost *:8080>
DocumentRoot /home/www/hoge/public
ServerName apache.example.com
</VirtualHost>

httpdの再起動

$ service httpd restart


5. foreverのインストール

nodeのプログラムを常に動かすようにするため、npmでforeverのインストール

$ sudo npm install forever -g

$ forever start proxy.js

これで終わり。

参考


http://o.inchiki.jp/obbr/50

http://com4tis.net/2013/05/23/sakura-vps-apache-node-js-install-2/

https://gist.github.com/nnnnathann/3491640

http://qiita.com/kakakazuma/items/a65a984378c0c291cfda