如何給Egg.js項目開啓80端口訪問

爲何要

因某些特殊狀況,項目cdn作了防盜鏈,而後本地開發也收到了限制,在cdn設置了一些本地ip的白名單,竟然對端口支持很差,結果有時候能夠訪問cdn資源,有時候又不行,無奈,和運維、後端商量講開發地址暫時改爲80端口,以便正常開發~html

Egg.js的項目改端口很簡單啦。可是也有一些要注意的,本文面向 MacOS,固然 Linux系統應該一樣適用。

如何作

這裏有幾個方案,供君參考:node

修改package.json

跑哪一個命令就在這個命令後面加--port=80,例如:web

"start": "egg-scripts start --daemon --title=egg-server-51la-web-egg --workers=2 --port=80",
...

dev同理。npm

配置config.default.js

部分配置以下:json

'use strict';
module.exports = app => {
  const exports = {};
  exports.cluster = {
    listen: {
      port: 80,
      hostname: '127.0.0.1',
    },
  };
  return exports;
};

以上方法都適用於執行egg-scripts時有效(例如npm start)。若是須要執行npm run dev,開啓,請參考上文修改package.json的方案。後端

我最初經過設置config.local.js來實現,發現居然不成功,報錯!報錯信息部分以下:服務器

[egg-scripts] 2019-03-20 14:30:48,033 ERROR 7988 [app_worker] server got error: bind EADDRINUSE null:7001, code: EADDRINUSE

Nginx大法

比較麻煩,不過看了下官方文檔,應該也是能夠很好的支持的。有興趣請閱讀該節:app

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或者sudo npm run devsocket

也有多是:

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
COMMAND  PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    2982 whidy   25u  IPv6 0x2f7a1da313a05e4d      0t0  TCP *: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端口了。

參考

本文僅做爲總結形式,未能從新完整的實踐整個流程,若是有操做跳躍性或錯誤歡迎提出~

相關文章
相關標籤/搜索