mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

Apache動いてるCentosにnode入れてnodeも動かす

環境
node入れる

nodeのサイトを見ると6.xバージョンが現在安定版ぽいので、そちらを入れる。

$ sudo su
$ curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
$ yum -y install nodejs
$ yum install gcc-c++ make
$ node -v  // 確認
$ npm -v // 確認

参考: パッケージマネージャを利用した Node.js のインストール | Node.js

node動かしてみる
$ mkdir nodeApp
$ cd nodeApp
$ npm init
$ npm install express --save // express入れて動かす
$ vim app.js // expressのhello worldのコード書いとく
$ ln -s ~/nodeApp /var/www/node // /var/www側にリンク貼る
$ node /var/www/node/app.js // 動かす
apacheからnodeへproxyする

/etc/httpd/conf.d/node.confに書くのもあるっぽいけど、今回は /etc/httpd/conf/httpd.conf

<IfModule mod_proxy.c>
    ProxyPass /nodeApp http://127.0.0.1:3000
    ProxyPassReverse /nodeApp http://127.0.0.1:3000
</IfModule>

書いとく。この中にdeny, allow制限してもいいけど、今回はそのまま。
*注:上の設定のポート3000の後ろに/を付けてると、ルートはうまく表示されるけど、ルート以下の他のパスがうまく表示されなくなるので注意。 設定を反映、

$ service httpd restart

で、アクセスで確認!が、503エラー、、、、error_logには

[Mon Jan 23 17:43:43 2017] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:3000 (localhost) failed
[Mon Jan 23 17:43:43 2017] [error] ap_proxy_connect_backend disabling worker for (localhost)

で、selinuxあたりで限定されてるらしい。 参考:
Linux:CentOS6でmod_proxyが動かない - HiiHahWIKI - making some notes for... -
Apache Mod_proxy '[Error] (13)Permission Denied' Error on RHEL - SysAdmin's Journey

$ sestatus -b | grep httpd // 設定を確認

たしかにhttpd_can_network_connectoffになっている。これをonにする。

$ /usr/sbin/setsebool -P httpd_can_network_connect 1
$ service httpd restart
$ sestatus -b | grep httpd // onになってるの確認

これでアクセスすると、ちゃんとアクセスできた。OK

おまけ

node動かすのに、forever使って常駐させる。
www.npmjs.com

$ npm install forever -g
$ forever start app.js