Nederlandstalig? U woont in Vlaanderen? Bezoek Vlakbij.me en kom in contact met de beste handelaars in je buurt
通过 Apache 托管 Node.js 网站
我最近花了一些时间研究如何通过 Apache 托管 Node.js 网站,所以我想写一篇文章分享一下我的实现方法。当然,这种方法只有在您已经拥有一台运行 Apache 的服务器,并且希望在对服务器影响/更改最小的情况下添加 Node.js 网站时才有意义。如果您还没有使用 Apache,只是想发布一个 Node.js 网站,最好直接使用 Node.js 来托管,或者在它前面放置 Nginx,因为它比 Apache 更轻量级。但无论如何,这里是如何通过 Apache 实现它的方法。
首先,您需要一种在系统启动时自动启动 Node.js 进程,并在系统关闭时将其关闭的方法。这取决于您运行的服务器类型。就我而言,这是一台 Debian 服务器,所以我直接使用了 Nico Kaiser 的 sysv init 脚本 。另一个流行的替代方案是 upstart 实用程序,如果您使用的是 Ubuntu,它已经预装了。一旦您有了 start|stop|restart 脚本,您还需要一些东西来监控 Node.js 进程,以便在它挂掉时重启它。一个易于使用的工具是 monit 。Nico Kaiser 在 Github 上也为 Node.js 提供了一个很好的示例脚本。
一旦您有了 sysv init 或 upstart 脚本以及 monit,您的 Node.js 进程就可以在服务器上保持运行。当然,您可能将其设置为监听除 80 端口之外的其他端口,因为那是您的 Apache 服务器正在监听的端口。因此,现在您唯一要做的就是配置 Apache,将所有通过 URL 进入 80 端口的 Node.js 网站请求代理到您本地的 Node.js 进程。您首先需要安装 mod_proxy 和 mod_proxy_http 。之后,实现它的配置非常简单:
| < VirtualHost 109.74.199.47:80> | |
| ServerAdmin davy.brion@thatextramile.be | |
| ServerName thatextramile.be | |
| ServerAlias www.thatextramile.be | |
| ProxyRequests off | |
| < Proxy *> | |
| Order deny,allow | |
| Allow from all | |
| </ Proxy > | |
| < Location /> | |
| ProxyPass http://localhost:3000/ | |
| ProxyPassReverse http://localhost:3000/ | |
| </ Location > | |
| </ VirtualHost > |
就是这样。每个进入 http://thatextramile.be 或 http://www.thatextramile.be 的请求都将转发到 Node.js 正在监听的 http://localhost:3000。请注意,ProxyPassReverse 是必需的,以确保所有 HTTP 响应标头都包含代理 URL 而不是真实 URL (localhost)。
如果您需要 Node.js 提供的原始吞吐量,这种解决方案远非最佳。每个通过 Apache 进入的请求都会导致 Apache 线程等待/阻塞,直到从您的 Node.js 进程返回响应。这本质上与通过 Apache 托管 PHP 或 Ruby 时相同,所以这不是问题,但它确实消除了使用 Node.js 的好处之一。同样,这种方法只有在您已经使用 Apache 托管其他网站,并且只想以最小的影响将 Node.js 网站添加到服务器时才适用。
由 Davy Brion 编写,发布于 2012-01-15 15:23:09
参考资料: http://thatextramile.be/blog/2012/01/hosting-a-node-js-site-through-apache/
在 Apache 内部设置代理,
并将以该服务器名称 (ServerName) 进入的所有请求发送到相应的端口。