Node.js 尽管将端口3000设置为80,Express仍在侦听它?

Node.js 尽管将端口3000设置为80,Express仍在侦听它?,node.js,amazon-ec2,port,express-4,Node.js,Amazon Ec2,Port,Express 4,在AmazonEC2上运行。该代码是由express generator自动创建的 要启动应用程序,我必须执行以下操作: sudo端口=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.

在AmazonEC2上运行。该代码是由express generator自动创建的

要启动应用程序,我必须执行以下操作:

sudo端口=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'));
现在,我可以通过以下方式启动应用程序:

sudo npm启动

但是它说-Express服务器监听端口3000。我可以通过浏览器访问它,但为什么

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"
  }
}

我只是有个闪现的想法。几年前,同样的事情也发生在我身上

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

这两种解决方案中的任何一种都可以,但为了简单起见,我推荐第一种

  • 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重新路由:

  • 我发现使用nginx通常效果更好,原因有很多(例如,如果重新启动服务器)。重新启动服务器意味着您必须在重新启动时重新加载ipTables。如果您想实现自动化,这意味着您必须安装iptables恢复。但是使用NAT重路由表进行配置很难


    使用nginx非常简单。

    fyi,请确保将其转换为float。环境变量是字符串。例如,
    app.set('port',编号(process.env.port)| 80)谢谢,我这么做了,但还是说3000。检查你的package.json,可能有一个默认值覆盖了你的配置。在bin/www中,端口也可能被重新配置。package.json中没有任何内容,但你可能对bin/www的看法是正确的