PM2、Nginx & Reverse Proxy Server


Posted by Christy on 2022-02-13

本文為 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










Related Posts

Custom Hook 來自己寫一個  hook 吧!

Custom Hook 來自己寫一個 hook 吧!

[ 學習筆記系列 ] 很基礎的 JavaScript 入門 (一) - 基礎程式

[ 學習筆記系列 ] 很基礎的 JavaScript 入門 (一) - 基礎程式

CSS-[盒子的型態]- inline boxes | inline-block | block

CSS-[盒子的型態]- inline boxes | inline-block | block


Comments