本文為 Lidemy [BE201] > [部署:Nginx + PM2] 的讀書筆記
一、PM2 簡介
1. 安裝:npm install pm2 -g
2. pm2 ls
:看 PM2 有跑哪些東西
3. pm2 start index.js
:在相對應資料夾底下執行,可以跑寫好的程式
輸入熟悉的網址 http://localhost:5001/
,就跑起來了。
4. pm2 logs 0
:0 代表 id,可以看到該程式的 log
5. pm2 info 0
:可看到詳細資訊
6. pm2 stop 0
:終止程式
7. pm2 restart 0
:重跑一次
8. pm2 delete 0
:移除程式
二、為什麼我們需要 Nginx?
1. Proxy 代理:request 經由代理伺服器,發送到目的地
優點:
a. server 不知道 client 的真實身份,可以把 client 藏起來
b. 可以進入 ip 限制的網站,類似翻牆原理
c. Proxy server 有 cache,可以直接發送給 client 端,會比較快拿到結果
缺點:惡意的 proxy server 可以把使用者導到釣魚網站
2. 反向代理 Reverse Proxy Server
實作原理:client 端發送請求到伺服器時,伺服器再轉發到其他伺服器,client 不知道 server 的真實身份,把 server 藏起來。
如何知道有沒有經過 proxy server?幾乎沒有辦法知道。
為什麼要用反向代理?
因為只有一個伺服器可以佔用 80 port
一台主機可以放很多服務,如果要放三、四個服務,那其他的服務的網址就會變成 http://www.service.com:3306
之類的,蠻奇怪的。
因此在 80 port 上放反向代理伺服器,就可以根據客戶端的參數,藉由參數設定的 sub domain,把請求轉到不同的地方去。
ip: 1.1.1.1
1.1.1.1:80 Reverse Proxy Server
aaa.cs49.tw → 1.1.1.1 → nginx → 4001
bbb.cs49.tw → 1.1.1.1 → nginx → 5001
另一個好處是,別人看不出來你在內部使用哪一個 port
三、Nginx 實戰
1. 設定 gandi 域名
2. 利用 pm2 delete 0
:移除程式
3. 如果有問題,ufw status
確認狀況;ufw allow 80
,要先打開權限
4. systemctl status nginx:看 nginx 目前狀態
5. systemctl start nginx:把 nginx 跑起來
這時連到設定好的 port 應該連得進去
6. 修改 index.js 設定檔裡面的 port
7. pm2 start index.js
要驗證的話,可以輸入網址,後面接 port,不過要先把 port 的防火牆打開:ufw allow port number
8. 找到設定檔:/etc/nginx/sites-available/example.com
a. cd /etc/nginx
b. cd sites-available
c. 新增設定檔:
server {
// 一律填 80 port
listen 80;
// 填自己的網址
server_name example.com www.example.com;
// 改成自己的 port
location / {
proxy_pass http://127.0.0.1:5566;
}
}
9. systemctl reload nginx
10. ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
再重複步驟 9