2015-12-21 93 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只是简单而直接。