繁体   English   中英

我目前在端口 3000 上运行我的 amazon ec2 实例。我想在端口 80 上运行它。 我该怎么做?

[英]I currently run my amazon ec2 instance on port 3000. I want to run it on port 80 instead. How can I do it?

我有一个在端口3000上运行的 node.js 应用程序。 我将它部署在亚马逊网络服务 ( ec2 ) 上,它在那里工作。 我的server.js文件说:

var port            = process.env.PORT || 3000;
(...)
app.listen(port);
console.log('App listening on port ' + port);

我在 aws 设置中的安全组似乎也打开了端口 80:

在此处输入图片说明

所以我认为只需将var port更改为= 80并重新启动服务器就足够了。 但是当我这样做时,我得到了一个错误:

bitnami@ip-172-31-47-102:~/apps/myproject/www/myproject$ sudo node server.js
App listening on port 80
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::80
    at Object.exports._errnoException (util.js:856:11)
    at exports._exceptionWithHostPort (util.js:879:20)
    at Server._listen2 (net.js:1237:14)
    at listen (net.js:1273:10)
    at Server.listen (net.js:1369:5)
    at Function.app.listen (/opt/bitnami/apps/myproject/www/myproject/node_modules/express/lib/application.js:542:24)
    at Object.<anonymous> (/opt/bitnami/apps/myproject/www/myproject/server.js:43:5)
    at Module._compile (module.js:398:26)
    at Object.Module._extensions..js (module.js:405:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:430:10)
    at startup (node.js:141:18)
    at node.js:1003:3

我在亚马逊上使用Bitnami MEAN 3.2.1-0系统。

另外,我想更改此端口的原因是:

到目前为止,我所有的网络服务都在端口 3000 上运行。但是,我还有一个带有index.html文件的public_html文件夹。 所以当任何用户想要显示我的网页时,他不仅要输入网页,还要输入端口( 3000 ),这不太方便。

到目前为止,整个应用程序都在 www.ec2-some-random-amazom-numbers.eu-west-1.compute.amazonaws.com:3000/index.html 下,所以我会购买一个普通的顶级域名来指向它(例如 something.com )但是 - 在这种情况下,我还需要将端口 3000 更改为 80 吗? 或者也许将应用程序留在 80 以外的端口上很常见?

如果是后者,那么我是否可以将端口保持原样,并将顶级域指向整个亚马逊上最后一个端口为 3000 的域名?

例如:当用户输入www.something.com它会将他重定向到www.ec2-some-random-amazom-numbers.eu-west-1.compute.amazonaws.com:3000/index.html

根据您获得的错误( EADDRINUSE ),其他一些Web服务器正在侦听服务器上已有的端口80。 如果可以阻止该服务器运行,则可以将应用程序更改为在端口80上运行。执行以下操作:

  1. 找出服务器端口80上已运行的内容。 Apache很有可能。 尝试使用netstat进行验证。
  2. 杀掉它(并防止它重新启动)。 这取决于什么是听力。
  3. 就像你已经尝试过的那样,将你的应用移动到端口80。

其他资源:

这样的事情对你有用:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

您希望使用iptables将端口80上的请求转发到内部端口3000。

如果您正在使用Bitnami Mean Stack,那么Apache正在侦听端口80,因此发生冲突。 您可以停止捆绑的Apache:

sudo /opt/bitnami/ctlscript.sh stop apache

或者您可以在Apache配置中添加ProxyPass规则:

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass

我使用nginx代理服务器进行端口转发

我遇到了同样的问题。

解决方案是使用端口80启动NodeJsExpressJs应用程序,我的意思是var port = 80并使用sudo node bin/www启动应用程序

当应用程序在端口3000上运行时,我的问题是无法从Internet访问应用程序: 无法从Internet访问使用端口3000的AWS中的NodeJs应用程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM