部署需要一台主機,主機通常會在雲端(ie 別人的一台電腦),然後用 ssh 的指令連上去,執行原本在 localhost 執行的指令,這一連串流程就是部署。
node index.js => server 跑起來
可是在遠端主機上執行這個指令,不可能一直停留在這個畫面,如果使用者連線斷了他就會中斷。
執行完指令會有個 process 跑起,我們會需要有個工具幫我們管理這個東西,讓他跑在背景。像是手機的 line 在背景跑著,就算沒有打開還是可以看到訊息。
pm2
ADVANCED, PRODUCTION PROCESS MANAGER FOR NODE.JS
npm install pm2 -g // 裝在 global
pm2 start index.js用 pm2 跑 index.jspm2 ls可以看到他跑起來多久,占用多少記憶體pm2 logs idid 放數字,可以看到程式的 logpm2 info id可以看到進一步的資訊,例如 log 存在哪裡、版本pm2 stop id暫停pm2 restart id重新再開一次pm2 delete id刪除
通常部署就是將檔案上傳到主機,執行 pm2 start 後面接要跑的 js,這樣 code 就跑起來了。更新檔案就將檔案拉下來,pm2 restart 他就可以再重新跑一次,
在 80 port 要跑一個別的東西,讓別的服務幫我把他的 request 轉到其他 port 去。這樣一來就可以在一台主機上跑很多不同的應用程式,用不同的 port 但同個入口。 => 反向代理
Proxy
client 端發 request 會先發到 Proxy server,Proxy server 再發到真正的目的地去。
目的:代理你的 request 到 server 去。代理在 client 端。

優點
- 基本上可以將真實身分隱藏,但有些 Proxy server 也會將使用者真實 IP 傳給 server
- 某些日本網站會鎖 ip,如果我們有一個日本的 Proxy server,我們就可以先連到日本,再連到 server。原理類似翻牆,但技術上不同。
- 對靜態網頁(活動網頁),某些 Proxy server 會做 cache,直接將結果返回給你。就不會到真正的 server 拿 response,速度會比較快
缺點
- 若 Proxy server 是惡意的 server,他可能會將你導向釣魚網站
Reverse Proxy
代理在 server 端。

梳理邏輯
正常情況
假設中間沒有經過任何的 Proxy server

Client 使用 proxy
- server 不知道 client 真實身分
- clinet 角度與 server 角度不同。server 不知道這個 request 是從 proxy server 來的,還是 client 發的 request

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

重點
- clinet 端可以利用 proxy server 發 request 到 server 去。
- 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 => nginx、bbb.cs49.tw => 1.1.1.1 => nginx,但現在他們的 domain 不同,所以 nginx 可以設定不同 domain 來的我要將他轉到哪,因此在同一台機器上就可以放很多不同服務。透過不同的子域名與 nginx 把她導到不同的 port 去。這樣就可以跑不同服務然後有不同的 subdomain。
aaa.cs49.tw => 1.1.1.1 => nginx => 4001、bbb.cs49.tw => 1.1.1.1 => nginx => 5001
透過這樣的操作,可以在一台機器上有很多不同的網址連,不用再用這種很醜的方式。對使用者而言,他不會知道開發人員在內部使用甚麼 port,用戶只知道他從這個網址進來。


