【发布时间】:2018-08-10 11:32:12
【问题描述】:
我第一次将我的 node.js 应用程序部署到商业 VPS。我之前通过 Heroku 部署了应用程序,但整个过程与这次的体验大不相同。我已经阅读并尝试了一些我从 Google 获得的 VPS 部署文章,但其中大多数已经过时或提供的条件不完全相同。不知何故,我的 nodejs 应用程序和 nginx 都下载并在我的 VPS 上运行,但我仍然看不到应用程序的默认页面,而 nginx 默认页面可从 VPS 默认 IP 地址访问。
我的设置:
- 操作系统:CentOS7
- VPS:Vultr
- Node.js(也从服务器端更新到 8.9.4)
- Express/Nginx(已安装并更新到最新稳定版)
- 该应用已经在本地 PC 和 heroku 上测试过,运行良好。
我可以从控制台和 pm2 监视器状态看到我的应用程序正在运行,它们都是绿色的。但是,我看不到从 IP 地址和端口运行的应用程序。
我从 Node.js 应用程序设置的端口
http.listen(process.env.PORT || 3000, function(){
console.log("server is up at " + this.address().port)
})
我使用了与 Heroku 相同的端口设置(因为 Heroku 不支持任意端口设置)。该应用程序似乎在端口 3000 上运行。
[root@myserver]ip a 结果:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet ***.***.***.***/*** brd XXX.XXX.XXX.XXX scope global dynamic eth0
valid_lft 78778sec preferred_lft 78778sec
inet6 XXXX::XXXX:XXX:XXXX:XXXX/XX scope link
valid_lft forever preferred_lft forever
我使用了上面用***.***.***.*** 屏蔽的IP 地址(带有和不带3000 端口),它显示了nginx 默认页面,但没有显示nodejs 应用程序。我试图修改我的 nginx.conf 但建议因页面而异,我不知道如何去做。有人说我应该在位置括号内添加http://localhost:PORT; 作为代理传递,而另一些人说我应该添加http://APP_PRIVATE_IP_ADDRESS:PORT;。甚至我应该编辑的nginx.conf的位置也因文章而异。我从与建议不同的目录中找到了一些nginx.conf,但它们甚至没有locations {}bracket。我不知道该选择哪一个,而且很难恢复决定,因为它很容易被破坏。
【问题讨论】:
-
如果你正在访问some-ip:3000并且你得到一个nginx页面,那肯定是错误的,因为只有一个服务器可以在一个端口上运行。这意味着您的 nginx 和 node.js 都在尝试使用相同的端口 (3000)
-
我访问了没有端口号的[默认IP地址],它显示的是nginx默认页面。但是,如果我尝试使用端口号(3000)访问应用程序,服务器没有响应。
标签: node.js linux nginx heroku centos7