我将部署我的node.js应用程序。
我只能使用纯粹的node.js启动自己的Web应用程序。
但我的fd告诉我,最好在apache或nginx下提供该网络应用程序。
任何人都有这样的经历,为什么我们需要apache,因为我可以在node.js + express上启动我的网络应用程序?
我想了解有关部署知识的更多信息。谢谢你的帮助。
袋
答案 0 :(得分:9)
将Apache置于Node之前在greenfield应用程序中并不常见。我可以批准的唯一情况是,如果您的公司在前端对基于Apache的基础架构(监控/安全/路由/缓存等)进行了现有投资,并且系统管理员坚持这种设置。
有些人喜欢在前面放置nginx或haproxy来管理路由规则,因此他们可以将静态文件(资产)的请求从Node.js传递出来(在处理静态文件时,node.js并不总是高效),或者做花哨的负载平衡或故障转移。在0.2.x等早期......甚至Ryan Dahl主张在Node.js面前运行一些主要用于安全的东西;虽然,我认为没有发现任何重大问题。我个人在Node.js面前运行nginx,因为我们有几个站点和服务点击了前端共享IP,我们代理回到不同内部端口上监听的各个节点实例。
Nginx比Apache更适合,因为它是轻量级和单线程的,而不是每个请求的Apache线程(在大多数正常设置中)。但是现在甚至还有一个可靠的(node-http-proxy排除)基于Node.JS的前端代理http://www.github.com/substack/bouncy,其中一个名人node.js开发人员使用/将使用它来构建他的PaaS。
答案 1 :(得分:3)
首先,是的,使用nginx而不是Apache - 配置nginx要容易得多,而且它更轻,效率更高。
预先使用nginx代理可以获得以下优势:
可能还有其他我错过的东西。
nginx可以做的一件好事就是“try_files”指令,该指令首先查找本地文件,如果找不到它,则传递给Node后端。
答案 2 :(得分:1)
你不想使用Apache,因为Nginx更适合,因为Nginx是为异步I / O而构建的。您希望将Nginx用作转发代理服务,将客户端指向实际的node.js Web服务器。这允许在应用程序增长时进行水平扩展以处理增加的负载。因此,如果您的第一个Nginx服务器已经不再存在,那么您可以安装另一个Nginx服务器......您还可以对Node.js Web服务器执行相同的操作。
客户端网络浏览器< - > Nginx< - >快递app.js
如果您从nginx提供服务,然后使用Express作为动态内容,您还可以更快地提供静态内容。对于部署,您可能希望编写一个sh脚本来像正常一样复制和运行Express服务器并像正常一样运行您的Nginx服务器,但使用转发代理设置。你可以在Nginx中使用这样的脚本:
upstream your_domain_app {
server 127.0.0.1:8000;
}
server {
listen 0.0.0.0:80;
server_name your_domain.com your_domain;
access_log /var/log/nginx/your_domain.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://your_domain_app/;
proxy_redirect off;
}
}
答案 3 :(得分:0)
像nginx这样的网络服务器的缓存和高级请求处理能力使它们成为在nodejs之前用作代理服务器的一个杀手选择,从而减轻了它们的负担。
由于上述原因,使用Web服务器提供静态文件也很常见,而不是nodejs。