介绍
在本系列“AWS应用程序部署基础”的前一篇文章中,我们建立了PostgreSQL数据库,然后通过Node.JS应用程序连接到它。
但是,Nodejs应用程序正在同一台计算机上运行,数据库访问是本地的。这是一个完全有效的设置,因为它在同一台机器上,所以访问很简单。但是,在不同的机器上运行应用程序和数据库是一种非常常见的设置,我们将在本系列的后面部分介绍这条路径。今天,我们将主要关注我们希望在公共子网中的 EC2 实例上运行的 Web 服务器。
如果您还记得我们的 VPC 设置,我们还有一个公共 EC2 实例,我们目前将其用作 Bastian 服务器(又名跳转主机)和 NAT 实例。现在,是将它用作 NGINX Web 服务器。这是一个 Amazon Linux EC2 实例。
在现实生活中,可能希望在单独的 EC2 实例上运行 NGINX,但是,过程是相同的,为了节省一些时间和成本,我将使用已经运行的 EC2 实例(公共子网)。
架构图
下面是更新的图表,显示了将要设置的 NGINX。
在 Amazon Linux EC2 上安装 NGINX
1. SSH 到 Bastian 服务器(公共 Amazon Linux EC2 实例)
- ssh -i ./fm-keypair.pem ec2-user@ip-address-machine //SSH to Bastian Server
2. Amazon Linux 上的更新包
- sudo yum update // (ubuntu) sudo apt-get update
3. 在Amazon Linux 上安装 NGINX
- sudo yum install nginx // (Ubuntu) sudo apt-get install nginx
4. 使用 Bash 测试安装
安装完成,测试一下,以确认可以正在工作。
- nginx -v
- sudo service nginx status
这是操作的输出:
访问Web服务器
NGINX 通常带有一个默认的网站和配置文件,配置为提供默认的网站。
因此,可以使用 curl 在本地访问这个网站:
根据结果,可以看到接收到了默认网站的 HTML。实际上,如果我们看到了附加到这个实例的安全组,那么:
也可以看到安全组已经配置了入站 HTTP 规则,从而可以从世界任何地方访问此网页。接下来,试一下在 Web 浏览器中使用 Bastian-host(与 NGINX 相同的 EC2)的 Elastic-IP 访问它:
连接 NGINX 与 Node.js 应用程序
接下来做个简单的测试,使用 NGINX 反向代理功能将 NGINX 与 Node.js 应用程序连接起来:
这样,就可以在 PostgreSQL 中获取产品数据了。
准备 Node.JS 应用程序
使用PM2来运行Nodejs 应用程序,PM2 将在后台继续运行节点服务器。
在私有子网中的 EC2 上安装 PM2(Node.JS 应用程序运行和运行应用程序的地方):
- 1. ssh to ubuntu EC2
- 2. sudo npm install pm2 -g // Install pm2
- 3. pm2 start server.js // Run the Server app
输出结果为:
pm2的其他相关指令如下:
- >> pm2 stop server.js
- >> pm2 restart server.js
另外,在 pm2 网站上还可以查找更多命令。
让我们看看私有子网中连接到 Ubuntu EC2 机器的安全组:
因此,所有来自公共子网的流量都是允许的。在这一点上,我想做的另一项测试是查看是否可以从公共子网(Bastian-host)中的 EC2 实例访问 Node.JS 应用程序。
可以看到,如预期的那样,我们能够从公共 EC2 机器与 Node 应用程序(在私有 EC2 端口 3000 上运行)进行通信。
接下来,设置 NGINX 反向代理。
NGINX 配置
尽量保持细节简单和基本,可以在网上找到有关各种配置的更多信息。
更新 Nginx 配置文件以进行代理配置:
- sudo nano /etc/nginx/nginx.conf
在 nano 编辑器中打开配置文件,向下滚动直到看到一个服务器块,点击为节点应用程序添加位置 和代理路径信息,如下所示(请注意在端口 3000 上运行 Node.JS 应用程序的 Ubuntu EC2 机器的私有 IP 地址):
- location /nodeapp/{ proxy_pass http://10.0.2.99:3000/; }
这是公共 EC2 实例上的 Nginx 配置文件。
按 Ctrl+X 保存并关闭文件,重新启动 NGINX 服务。
- sudo service nginx restart
现在,让我们尝试使用浏览器访问节点应用程序端点:
可以看到,我们能够收到预期的数据。
以下是当前工作负载的更新图表:
NGNIX 是一个轻量级且易于使用的 Web 服务器。可以向运行在不同EC2实例上的不同服务引入多个位置块和代理调用。
总结
在本文中,我们在公有子网中的 EC2 实例上安装了 NGINX。然后进行反向代理配置,将来自上一个post的请求传递给Node.JS应用程序,因为该应用程序可以连接到 PostgreSQL 数据库,所以我们可以通过 HTTP 访问数据。
这是一个非常基本的、常见的web服务器、应用程序和数据库设置,在下一篇文章中,我们将添加更多应用程序、配置并根据需要增强此设计。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】