如何給Egg.js專案開啟80埠訪問
為什麼要
因某些特殊情況,專案cdn做了防盜鏈,然後本地開發也收到了限制,在cdn設定了一些本地ip的白名單,居然對埠支援不好,結果有時候可以訪問cdn資源,有時候又不行,無奈,和運維、後端商量講開發地址暫時改成80
埠,以便正常開發~
Egg.js的專案改埠很簡單啦。但是也有一些要注意的,本文面向MacOS
,當然Linux
系統應該同樣適用。
如何做
這裡有幾個方案,供君參考:
修改package.json
跑哪個命令就在這個命令後面加--port=80
,例如:
"start": "egg-scripts start --daemon --title=egg-server-51la-web-egg --workers=2 --port=80", ...
dev同理。
配置config.local.js
如果沒有這個檔案自己建立一個,當然這個對應的是開發模式下使用。
部分配置如下:
'use strict'; module.exports = app => { const exports = {}; exports.cluster = { listen: { port: 80, hostname: '127.0.0.1', }, }; return exports; };
Nginx大法
比較麻煩,不過看了下官方文件,應該也是可以很好的支援的。有興趣請閱讀該節:
Warning
如果你不看這部分,很遺憾,你肯定跑不起來。你可能會遇到下面這些異常情況:
ERROR 3810 nodejs.AppWorkerDiedError: [master] app_worker#1:3813 died (code: 0, signal: null, suicide: false, state: dead), current workers: []
原因是Node.js的伺服器端預設是無法使用1024以下的埠的。咋辦呢?使用sudo
哈哈哈。就是這樣:sudo npm start
或者sodu npm run dev
。
也有可能是:
ERROR 3709 [app_worker] server got error: bind EADDRINUSE null:80, code: EADDRINUSE
埠被佔用了!node.js的server服務無法在ctrl+c後立刻終止。比如預設7001未能正常關閉,通過`config.local.js
檔案修改的80埠也沒有能夠生效,每次啟動服務都是啟動了新的埠
7002,此時:需要查出佔用
7001的埠的
pid`,將它終止。操作效果大致如下:
P750TM:51la-web-egg whidy$ lsof -i:7001 COMMANDPIDUSERFDTYPEDEVICE SIZE/OFF NODE NAME node2982 whidy25uIPv6 0x2f7a1da313a05e4d0t0TCP *:afs3-callback (LISTEN) P750TM:51la-web-egg whidy$ kill kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] P750TM:51la-web-egg whidy$ kill 2982 P750TM:51la-web-egg whidy$ lsof -i:7001
上面用到兩個命令:lsof -i:[埠號]
,kill [程序的PID]
,最後重新查詢7001就沒有任何返回,說明Ok了,再次執行sudo npm run dev
,那麼就很好的使用80埠了。
參考
本文僅作為總結形式,未能重新完整的實踐整個流程,如果有操作跳躍性或錯誤歡迎提出~