AWS 應(yīng)用程序部署基礎(chǔ)知識:安裝NGINX
譯文【51CTO.com快譯】
介紹
在本系列“AWS應(yīng)用程序部署基礎(chǔ)”的前一篇文章中,我們建立了PostgreSQL數(shù)據(jù)庫,然后通過Node.JS應(yīng)用程序連接到它。
但是,Nodejs應(yīng)用程序正在同一臺計(jì)算機(jī)上運(yùn)行,數(shù)據(jù)庫訪問是本地的。這是一個(gè)完全有效的設(shè)置,因?yàn)樗谕慌_機(jī)器上,所以訪問很簡單。但是,在不同的機(jī)器上運(yùn)行應(yīng)用程序和數(shù)據(jù)庫是一種非常常見的設(shè)置,我們將在本系列的后面部分介紹這條路徑。今天,我們將主要關(guān)注我們希望在公共子網(wǎng)中的 EC2 實(shí)例上運(yùn)行的 Web 服務(wù)器。
如果您還記得我們的 VPC 設(shè)置,我們還有一個(gè)公共 EC2 實(shí)例,我們目前將其用作 Bastian 服務(wù)器(又名跳轉(zhuǎn)主機(jī))和 NAT 實(shí)例。現(xiàn)在,是將它用作 NGINX Web 服務(wù)器。這是一個(gè) Amazon Linux EC2 實(shí)例。
在現(xiàn)實(shí)生活中,可能希望在單獨(dú)的 EC2 實(shí)例上運(yùn)行 NGINX,但是,過程是相同的,為了節(jié)省一些時(shí)間和成本,我將使用已經(jīng)運(yùn)行的 EC2 實(shí)例(公共子網(wǎng))。
架構(gòu)圖
下面是更新的圖表,顯示了將要設(shè)置的 NGINX。
在 Amazon Linux EC2 上安裝 NGINX
1. SSH 到 Bastian 服務(wù)器(公共 Amazon Linux EC2 實(shí)例)
- 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 測試安裝
安裝完成,測試一下,以確認(rèn)可以正在工作。
- nginx -v
- sudo service nginx status
這是操作的輸出:
訪問Web服務(wù)器
NGINX 通常帶有一個(gè)默認(rèn)的網(wǎng)站和配置文件,配置為提供默認(rèn)的網(wǎng)站。
因此,可以使用 curl 在本地訪問這個(gè)網(wǎng)站:
根據(jù)結(jié)果,可以看到接收到了默認(rèn)網(wǎng)站的 HTML。實(shí)際上,如果我們看到了附加到這個(gè)實(shí)例的安全組,那么:
也可以看到安全組已經(jīng)配置了入站 HTTP 規(guī)則,從而可以從世界任何地方訪問此網(wǎng)頁。接下來,試一下在 Web 瀏覽器中使用 Bastian-host(與 NGINX 相同的 EC2)的 Elastic-IP 訪問它:
連接 NGINX 與 Node.js 應(yīng)用程序
接下來做個(gè)簡單的測試,使用 NGINX 反向代理功能將 NGINX 與 Node.js 應(yīng)用程序連接起來:
這樣,就可以在 PostgreSQL 中獲取產(chǎn)品數(shù)據(jù)了。
準(zhǔn)備 Node.JS 應(yīng)用程序
使用PM2來運(yùn)行Nodejs 應(yīng)用程序,PM2 將在后臺繼續(xù)運(yùn)行節(jié)點(diǎn)服務(wù)器。
在私有子網(wǎng)中的 EC2 上安裝 PM2(Node.JS 應(yīng)用程序運(yùn)行和運(yùn)行應(yīng)用程序的地方):
- 1. ssh to ubuntu EC2
- 2. sudo npm install pm2 -g // Install pm2
- 3. pm2 start server.js // Run the Server app
輸出結(jié)果為:
pm2的其他相關(guān)指令如下:
- >> pm2 stop server.js
- >> pm2 restart server.js
另外,在 pm2 網(wǎng)站上還可以查找更多命令。
讓我們看看私有子網(wǎng)中連接到 Ubuntu EC2 機(jī)器的安全組:
因此,所有來自公共子網(wǎng)的流量都是允許的。在這一點(diǎn)上,我想做的另一項(xiàng)測試是查看是否可以從公共子網(wǎng)(Bastian-host)中的 EC2 實(shí)例訪問 Node.JS 應(yīng)用程序。
可以看到,如預(yù)期的那樣,我們能夠從公共 EC2 機(jī)器與 Node 應(yīng)用程序(在私有 EC2 端口 3000 上運(yùn)行)進(jìn)行通信。
接下來,設(shè)置 NGINX 反向代理。
NGINX 配置
盡量保持細(xì)節(jié)簡單和基本,可以在網(wǎng)上找到有關(guān)各種配置的更多信息。
更新 Nginx 配置文件以進(jìn)行代理配置:
- sudo nano /etc/nginx/nginx.conf
在 nano 編輯器中打開配置文件,向下滾動(dòng)直到看到一個(gè)服務(wù)器塊,點(diǎn)擊為節(jié)點(diǎn)應(yīng)用程序添加位置 和代理路徑信息,如下所示(請注意在端口 3000 上運(yùn)行 Node.JS 應(yīng)用程序的 Ubuntu EC2 機(jī)器的私有 IP 地址):
- location /nodeapp/{ proxy_pass http://10.0.2.99:3000/; }
這是公共 EC2 實(shí)例上的 Nginx 配置文件。
按 Ctrl+X 保存并關(guān)閉文件,重新啟動(dòng) NGINX 服務(wù)。
- sudo service nginx restart
現(xiàn)在,讓我們嘗試使用瀏覽器訪問節(jié)點(diǎn)應(yīng)用程序端點(diǎn):
可以看到,我們能夠收到預(yù)期的數(shù)據(jù)。
以下是當(dāng)前工作負(fù)載的更新圖表:
NGNIX 是一個(gè)輕量級且易于使用的 Web 服務(wù)器。可以向運(yùn)行在不同EC2實(shí)例上的不同服務(wù)引入多個(gè)位置塊和代理調(diào)用。
總結(jié)
在本文中,我們在公有子網(wǎng)中的 EC2 實(shí)例上安裝了 NGINX。然后進(jìn)行反向代理配置,將來自上一個(gè)post的請求傳遞給Node.JS應(yīng)用程序,因?yàn)樵搼?yīng)用程序可以連接到 PostgreSQL 數(shù)據(jù)庫,所以我們可以通過 HTTP 訪問數(shù)據(jù)。
這是一個(gè)非常基本的、常見的web服務(wù)器、應(yīng)用程序和數(shù)據(jù)庫設(shè)置,在下一篇文章中,我們將添加更多應(yīng)用程序、配置并根據(jù)需要增強(qiáng)此設(shè)計(jì)。
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】