[BE201] 後端中階:部署:Nginx + PM2


Posted by s103071049 on 2021-08-12

部署需要一台主機,主機通常會在雲端(ie 別人的一台電腦),然後用 ssh 的指令連上去,執行原本在 localhost 執行的指令,這一連串流程就是部署。

node index.js => server 跑起來
可是在遠端主機上執行這個指令,不可能一直停留在這個畫面,如果使用者連線斷了他就會中斷。

執行完指令會有個 process 跑起,我們會需要有個工具幫我們管理這個東西,讓他跑在背景。像是手機的 line 在背景跑著,就算沒有打開還是可以看到訊息。

pm2

ADVANCED, PRODUCTION PROCESS MANAGER FOR NODE.JS

npm install pm2 -g // 裝在 global
  1. pm2 start index.js 用 pm2 跑 index.js
  2. pm2 ls 可以看到他跑起來多久,占用多少記憶體
  3. pm2 logs id id 放數字,可以看到程式的 log
  4. pm2 info id 可以看到進一步的資訊,例如 log 存在哪裡、版本
  5. pm2 stop id 暫停
  6. pm2 restart id 重新再開一次
  7. pm2 delete id 刪除

通常部署就是將檔案上傳到主機,執行 pm2 start 後面接要跑的 js,這樣 code 就跑起來了。更新檔案就將檔案拉下來,pm2 restart 他就可以再重新跑一次,

在 80 port 要跑一個別的東西,讓別的服務幫我把他的 request 轉到其他 port 去。這樣一來就可以在一台主機上跑很多不同的應用程式,用不同的 port 但同個入口。 => 反向代理

Proxy

client 端發 request 會先發到 Proxy server,Proxy server 再發到真正的目的地去。
目的:代理你的 request 到 server 去。代理在 client 端。

優點

  1. 基本上可以將真實身分隱藏,但有些 Proxy server 也會將使用者真實 IP 傳給 server
  2. 某些日本網站會鎖 ip,如果我們有一個日本的 Proxy server,我們就可以先連到日本,再連到 server。原理類似翻牆,但技術上不同。
  3. 對靜態網頁(活動網頁),某些 Proxy server 會做 cache,直接將結果返回給你。就不會到真正的 server 拿 response,速度會比較快

缺點

  1. 若 Proxy server 是惡意的 server,他可能會將你導向釣魚網站

Reverse Proxy

代理在 server 端。

梳理邏輯

正常情況

假設中間沒有經過任何的 Proxy server

Client 使用 proxy

  1. server 不知道 client 真實身分
  2. clinet 角度與 server 角度不同。server 不知道這個 request 是從 proxy server 來的,還是 client 發的 request

Server 使用 proxy

  1. client 不知道 server 真實身分,因為中間有了 reverse proxy server
  2. clinet 角度與 server 角度不同。從 server 角度看我知道我前面有放一台 reverse proxy server,所以他會再把 request 轉向其他地方。從 clinet 的角度看,他就只是發一個 request 到 server,他會不知道到底是真的在處理他 request 的那台 server 還是反向代理的 server。

重點

  1. clinet 端可以利用 proxy server 發 request 到 server 去。
  2. server 端也可以用 reverse proxy server 把後面多台 server 隱藏,client 就不知道她到底發給誰。

為甚麼要用反向代理 ?

一台主機只能放一個服務就太浪費了,但用其他 port 的話網址就會變得很醜。例如:cs49.tw:5001、cs49.tw:4001

我可以在 cs49.tw 的 80 port 上面放 reverse proxy server,他會根據 client 的一些參數(ie subdomain)把 request 轉到不同地方去。別人在內部也看不出妳使用麼 port。

假設我的 ip 是 1.1.1.1
原本的狀態下,連到短網址與縮圖服務只能這樣連:cs49.tw:5001、cs49.tw:4001

1.1.1.1: 80 reversed proxy server : nginx
1.1.1.1: 4001 tinyurl 
1.1.1.1: 5001 imgur

如果今天我創了新的 subdomain aaa.cs49.tw => 1.1.1.1 => nginxbbb.cs49.tw => 1.1.1.1 => nginx,但現在他們的 domain 不同,所以 nginx 可以設定不同 domain 來的我要將他轉到哪,因此在同一台機器上就可以放很多不同服務。透過不同的子域名與 nginx 把她導到不同的 port 去。這樣就可以跑不同服務然後有不同的 subdomain。
aaa.cs49.tw => 1.1.1.1 => nginx => 4001bbb.cs49.tw => 1.1.1.1 => nginx => 5001

透過這樣的操作,可以在一台機器上有很多不同的網址連,不用再用這種很醜的方式。對使用者而言,他不會知道開發人員在內部使用甚麼 port,用戶只知道他從這個網址進來。


#部署:Nginx + PM2







Related Posts

Select Sort

Select Sort

初探網頁前後端架構

初探網頁前後端架構

ESM 模組 (ES6 Modules or JavaScript Modules)

ESM 模組 (ES6 Modules or JavaScript Modules)


Comments