尽管设置为80,Express正在侦听端口3000?

时间:2015-12-21 21:08:25

标签: node.js amazon-ec2 port express-4

在Amazon EC2上运行。代码是由快速生成器自动创建的。

要启动应用程序,我必须这样做:

  

sudo PORT = 80 npm start

然后我添加了第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'));

现在我可以通过说:

启动应用程序
  

sudo npm start

但它说 - 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"
  }
}

1 个答案:

答案 0 :(得分:0)

我刚才有一个想法。多年前我也发生过同样的事情。

问题是,绑定到端口80非常复杂。

两种解决方案中的任何一种都可以使用,但为了简单起见,我建议使用第一种解决方案。

  1. Nginx的
  2. 您可以使用非常简单的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;
            }
    
    }
    
    1. 或者,您可以使用IpTables NAT重新路由:
    2. https://glassonionblog.wordpress.com/2011/04/08/tomcat-redirecting-traffic-from-port-8080-to-80-using-iptables/

      我发现使用nginx通常效果更好,原因有很多(例如,如果你重新启动服务器)。重新启动服务器意味着必须在重新启动时重新加载ipTables。如果要自动执行此操作,则意味着必须安装iptables-restore。但配置NAT重新路由表很尴尬。

      使用nginx只是简单直接。