问题 将域指向我的远程Node JS应用程序?


我正在尝试弄清楚如何在我的Ubuntu 10.04 LTS服务器上部署Node JS。我读过许多不同的博客和文章,解释了多种不同的方式。大多数似乎过时了,或者看起来并没有真正起作用。

似乎最简单的解决方案是使用像Forever这样的东西? ......或Monit或Monit或Supervisor。那是对的吗?

我仍然不明白的一件事是没有使用像Ngnix这样的东西,我怎么能真正得到我的域名(例如example.com)来实际指向我的Node JS应用程序并且它正在运行端口?

非常感谢任何指导。我不是这方面的专家,所以请原谅我在这里缺乏知识。 (我正在努力!:)

更新:我问这个的原因是在我的服务器上我有Ngnix运行我的静态/ Django项目。我想要使​​用相同的服务器来处理我正在搞乱的一些示例Node JS应用程序。我已经关注了关于vhosts和Connect with Node JS的链接,这很好用,但我仍然不明白如何让我的某个域实际上指向我服务器上的Node应用程序?


5615
2018-06-09 10:29


起源

重复 单节点-JS-HTTP-服务器接受的连接上,多主机名  NodeJS plain http服务器无法绑定到目标域,但您可以使用 连 中间件。 - Phillip Kovalev
因此,对于我将域(如example.com)指向我的服务器上运行的节点应用程序,我需要使用Connect vhost中间件吗?我仍然不明白'example.com'将如何知道去节点应用程序... - littlejim84
我已将我的问题更新为更具体。 - littlejim84
@Phillip Kovalev这是一个非常不同的问题。 - Casey Chu


答案:


您需要将域名的概念与实际服务器分开。域名  到服务器。当浏览器(或其他客户端)请求example.com时,DNS会查找关联的IP地址和 指导 浏览器到该IP地址的服务器。

然后,浏览器通过查看URL来选择通过哪个端口发送请求。例如,对example.com:345的请求将选择端口345.如果未指定,默认情况下,在使用HTTP时,它使用端口80。

因此,浏览器通过端口80发送了请求。现在,在您的服务器上,有一个程序  到那个港口。对你来说,它会nginx。 Nginx读取请求(“哦,你正在寻找index.html”)并传回你请求的内容。

在您的场景中,Node.JS取代了Nginx。要使Node.JS响应,它还需要侦听端口并进行适当的响应。这就是你的代码进来的地方:

require('http').createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

这将启动服务器,侦听端口1337.任何指向example.com:1337的请求都将由具有“Hello World”的Node.JS应用程序响应。

TL;博士: 您的域名已指向您的服务器。您可以访问example.com:1337访问您的应用程序,其中1337是您的端口。


15
2018-06-09 12:04



希望很好的答案,我需要凯西这一步一步一步,谢谢你。我理解你所说的一切,但似乎我仍然有在URL末尾有端口号的问题。这个答案说关于使用Node与Ngnix(stackoverflow.com/questions/5009324/node-js-nginx-and-now)...也许不是最好的事情? ...虽然回答你的答案,我仍然想知道如何在不同的端口上运行Node,但不必将端口号放在URL的末尾? - littlejim84
啊,那应该相当简单。在nginx的服务器配置(您用于静态网站的服务器配置)中,添加该子句 location /blah/ { proxy_pass http://localhost:1337; }。基本上,nginx将请求从端口80代理到端口1337.现在,您可以访问example.com/blah上的Node.JS应用程序。 - Casey Chu
希望谢谢。所以在我的情况下,因为我无论如何都在我的服务器上运行静态和Django站点(使用gunicorn)...使用nginx来代理Node JS应用程序,对我来说不是一个坏的方法吗?我刚刚开始使用Node JS,我只是想要一个实验和部署的地方......所以使用Ngnix和Node,以这种方式,对我来说这是一个很好的方法......现在呢? (再次感谢!) - littlejim84
这当然不是一个糟糕的方式!虽然,如果您只是在尝试,URL末尾的小端口号确实不是那么糟糕:) - Casey Chu
希望好点。谢谢凯西,你一直很有帮助! - littlejim84