2015-12-21 155 views
0

在Amazon EC2上運行。代碼由express-generator自動創建。儘管將端口設置爲80,但Express仍在監聽端口3000?

要啓動的應用程序我不得不這樣做:

須藤PORT = 80個NPM啓動

然後,我添加線14:

app.set('port', process.env.PORT || 80); 

和66

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 

現在我可以說啓動應用程序:

須藤NPM啓動

但它說 - Express服務器偵聽端口3000。我可以從我的瀏覽器訪問它,但爲什麼3000

http://pastebin.com/bwcBHZaa

的package.json

{ 
    "name": "haha", 
    "version": "0.0.0", 
    "private": true, 
    "scripts": { 
    "start": "node ./bin/www" 
    }, 
    "dependencies": { 
    "body-parser": "~1.13.2", 
    "cookie-parser": "~1.3.5", 
    "debug": "~2.2.0", 
    "express": "~4.13.1", 
    "express-generator": "^4.13.1", 
    "jade": "~1.11.0", 
    "kerberos": "file:kerberos", 
    "mongodb": "^2.0.52", 
    "morgan": "~1.6.1", 
    "serve-favicon": "~2.3.0" 
    } 
} 
+0

fyi,確保你轉換爲浮點數。 Env變量是字符串。即。 'app.set('port',Number(process.env.PORT)|| 80);' – agconti

+0

謝謝,我做過了,但仍然在說3000. –

+0

檢查你的package.json,也許有一個默認覆蓋你的配置 – Ludo

回答

0

我只是有一個閃光的想法。幾年前我也遇到過這種情況。

的事情是,這是非常複雜的綁定到端口80

無論是兩種解決方案之一的工作,但我建議第一個爲簡單。

  1. Nginx的

可以使用非常簡單的配置nginx的 「重新路由」 端口3000請求發送到端口80

#etc/nginx/sites-enabled/mysite.conf 

server { 
     listen 0.0.0.0:80; 
     server_name www.mysite.com mysite.com; 
     location/{ 
       proxy_pass http://localhost:3000; 
       proxy_http_version 1.1; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection 'upgrade'; 
       proxy_set_header Host $host; 
       proxy_cache_bypass $http_upgrade; 
     } 

} 
  • 或者,您可以用iptables NAT改道:
  • https://glassonionblog.wordpress.com/2011/04/08/tomcat-redirecting-traffic-from-port-8080-to-80-using-iptables/


    我發現使用nginx只是在一般情況下工作得更好,因爲多種原因(例如,如果你重新啓動你的服務器)。重新啓動服務器意味着您必須在重新啓動時重新加載ipTable。如果你想自動化這個,那意味着你必須安裝iptables-restore。但是使用NAT重路由表進行配置很尷尬。

    使用nginx只是簡單而直接。