我应该把我的 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 以启用更改。
我最近在我的 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 以启用更改。