我应该把我的 Node JS 应用程序放在哪里,以便可以通过主网站访问它?

Where do I put my Node JS app so it is accessible via the main website?

我最近在我的 home/myusername/myappname 目录中安装了一个 nodejs 应用程序 (keystone)。

当我访问 www.mydomain.com 时,没有任何显示 - 即使在打开我的 nodejs 应用程序后也是如此。

这些文件应该放在哪里?

我是 运行 ubuntu 16.04.

过去我使用过 var/www 文件夹,但我没有使用 apache - 我需要手动创建这个文件夹吗?

谢谢!

要让您的应用程序可见,它必须 运行ning(显然)并且可以在端口 80 上访问(如果您希望它在不向 URL 添加端口号的情况下可用) .

它在磁盘上的什么位置并不重要,只要它是 运行ning。

您不需要 Apache 或 nginx 或任何其他服务器。您的 Node 应用程序可能会在端口 80 上侦听。但它也可以在其他端口上侦听,而您的其他服务器(Apache、nginx 等)可以将请求代理到该端口。

但是如果您的应用正在监听,例如端口 3000 那么您应该能够以 http://www.example.com:3000/.

的形式访问它

此外,请确保您的域配置正确。 www 子域的 IPv4(或 IPv6 的 AAAA)的 A 记录应等于您服务器的可公开访问的 IP 地址。

并确保您使用的端口未被防火墙阻止。

更新

要了解如何使用 Keystone 设置端口,请参阅:

它可以在配置中更改,或者您可以 运行 您的应用程序:

PORT=80 node yourApp.js

而不是:

node yourApp.js

但请记住,要使用 1024 以下的端口号,您通常需要程序以 root 身份 运行(或添加更复杂的特殊权限)。

这也意味着这将是您可以在此服务器上 运行 的唯一应用程序,即使您有更多域名也是如此。

如果您不想 运行 作为 root 或您想要托管更多应用程序,安装 nginx 并代理请求是最简单的方法。这样的配置称为 "reverse proxy" - 使用该短语搜索信息和教程很好。

最简单的 nginx 配置是这样的:

server {
    listen 80;
    server_name www.example.com;
    location / {
        proxy_pass http://localhost:3000;
    }
}

您可以设置在:

  • /etc/nginx/sites-available/default

或在不同的文件中,例如:

  • /etc/nginx/sites-available/example

然后符号链接为 /etc/nginx/sites-enabled/example

修改配置后需要重启nginx

您可以在此处找到有关配置反向代理的更多选项:

您需要在 Apache 和您的 Node.js 应用程序之间建立代理,因为 Node.js 有一个内置服务器。假设您的 Node.js 应用程序在 9000 端口上提供服务。然后你需要做一个代理,将 80 端口中的所有流量重定向到 9000 端口,其中 Node.js 应用程序是 运行.

1.启用 mod_proxy

您可以通过 a2enmond 来做到这一点。

sudo a2enmod proxy
sudo a2enmod proxy_http

2。设置代理

编辑 /etc/apache2/sites-available/example.com.conf 文件并添加以下行:

ProxyRequests Off
Order deny, allow from All
ProxyPass / http://0.0.0.0:9000 ProxyPassReverse / http://0.0.0.0:9000

这基本上是说:“将所有流量从根 / 重定向到 http://0.0.0.0:9000。主机 0.0.0.0:9000 是您的应用所在的位置 运行。

最后重新启动 apache 以启用更改。