使用Apache在Private Subnet上运行节点
我想做的事情
虽然图像不清晰,但我想做的是:
– 使用Apache作为反向代理,在端口80上监听,并运行端口3000上的Node。
我們會從建立AWS的EC2實例並在私有子網之間確認通訊的狀態開始。
请留个备忘录,如果有什么问题,请评论留言。

安装Apache
sudo yum -y install httpd
sudo service httpd start
基本指令集
// Apacheを起動する
$ service httpd start
// Apacheを停止する
$ service httpd stop
// Apacheを再起動する
$ service httpd restart
请确认版本
$ httpd -v
Server version: Apache/2.4.33 ()
简述
如果不加sudo,就会被指责。没有任何.service文件提供了org.freedesktop.PolicyKit1的名字。
安装nodebrew。
安装nodebrew后,可以方便地切换node的版本。
curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH
source ~/.bashrc
安装Node
nodebrew install stable
nodebrew use stable
node -v
安装npm
npm的概念是一个汇集了预先准备好的便捷功能的工具集合。
sudo yum install npm
npm -v
安装 Express
Express 是一个最小而灵活的 Node.js Web 应用程序框架,为Web应用程序和移动应用程序提供一系列稳定的功能。
由于可以自由使用数不尽的HTTP实用工具方法和中间件,因此可以快速而容易地创建稳健的API。
Express 使用户熟悉的Node.js功能更易于理解,并通过简单的层次结构提供基本的Web应用程序功能。
来自http://expressjs.com/ja/
$ npm install express --save
迷住了
安装失败了?
npm WARN saveError ENOENT: no such file or directory, open '/home/ec2-user/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/ec2-user/package.json'
npm WARN ec2-user No description
npm WARN ec2-user No repository field.
npm WARN ec2-user No README data
npm WARN ec2-user No license field.
似乎必须执行npm init。
当执行npm init命令时,会以交互形式要求输入各项内容,以创建package.json文件。
npm init
参考资料:https://qiita.com/sinmetal/items/395edf1d195382cfd8bc
请参考该网页链接。
再次使用这个链接在 express 上进行安装, 如果出现警告请参考:https://helen.hatenablog.com/entry/2016/05/22/003057
取决于个人的努力、毅力和智慧。
npm install express --save
+ express@4.16.3
updated 1 package and audited 119 packages in 3.162s
found 0 vulnerabilities
将apache的请求代理到node上。
$ sudo vi /etc/httpd/conf/httpd.conf
<IfModule mod_proxy.c>
ProxyPass / http:// {IP} :3000
ProxyPassReverse / http:// {IP} :3000
</IfModule>
将设置应用
$ service httpd restart
启动节点
$ node /var/www/node/app.js
Example app listening on port 3000!
我试着在80号询问,而不是3000号。
$ curl http://XXX.XXX.X.XX:80
// ちゃんと帰って来ることを確認
Hello World!
确认在3000号就不会回来。
$ curl http://XXX.XXX.X.XX:3000