【问题标题】:Express is listening on port 3000 despite setting it to 80?尽管将其设置为 80,Express 仍在侦听端口 3000?
【发布时间】:2016-03-28 00:56:23
【问题描述】:

在 Amazon EC2 上运行。代码是由 express-generator 自动创建的。

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

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

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

【问题讨论】:

  • 仅供参考,请确保您转换为浮点数。环境变量是字符串。 IE。 app.set('port', Number(process.env.PORT) || 80);
  • 谢谢,我做了,但还是说 3000。
  • 检查你的 package.json ,也许那里有一个默认覆盖你的配置
  • 还有可能是bin/www中的端口被重新配置了
  • package.json 中没有任何内容,但您对 bin/www 的看法可能是对的

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


【解决方案1】:

我刚刚有了一个闪念。几年前,同样的事情也发生在我身上。

问题是,绑定到 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;
        }

}
  1. 或者,您可以使用 IpTables NAT 重新路由:

https://glassonionblog.wordpress.com/2011/04/08/tomcat-redirecting-traffic-from-port-8080-to-80-using-iptables/


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

使用 nginx 简单直接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2019-11-08
    • 2019-08-21
    • 2019-05-05
    相关资源
    最近更新 更多