我在我的服务器上设置了Node.js和Nginx . 现在我想使用它,但是,在我开始之前有2个问题:
-
他们应该如何一起工作?我该如何处理这些要求?
-
Node.js服务器有2个概念,哪一个更好:
一个 . 为需要它的每个网站创建单独的HTTP服务器 . 然后在程序开头加载所有JavaScript代码,因此代码被解释一次 .
湾创建一个处理所有Node.js请求的Node.js服务器 . 这将读取所请求的文件并篡改其内容 . 因此,每个请求都会解释文件,但服务器逻辑要简单得多 .
我不清楚如何正确使用Node.js .
11 回答
您还可以在一个服务器配置中为应用程序添加不同的URL:
yourdomain.com/app1/* - >到本地运行的Node.js进程http://127.0.0.1:3000
yourdomain.com/app2/* - >到本地运行的Node.js进程http://127.0.0.1:4000
在 /etc/nginx/sites-enabled/yourdomain :
重启nginx:
启动应用程序
node app1.js
node app2.js
我们可以通过Nginx作为反向代理轻松设置Nodejs应用程序 .
以下配置假定NodeJS应用程序在127.0.0.1:8080上运行,
在上面设置你的Nodejs应用程序,
获取
HTTP_HOST
标头,您可以在其中应用特定于域的逻辑来提供响应 . “您的应用程序必须由流程管理器(如pm2或主管)管理,以处理情况/重用套接字或资源等 .
设置错误报告服务以获取 生产环境 错误,如sentry或rollbar
注意:您可以设置逻辑以处理特定于域的请求路由,为expressjs应用程序创建middleware
具有Nginx配置的Node.js .
添加以下配置,以便当我们来自“subdomain.your_domain.com”时,Nginx充当代理重定向到来自服务器的端口3000流量
您还可以使用node.js将静态文件生成到nginx提供的目录中 . 当然,站点的某些动态部分可以由节点提供,有些则由nginx(静态)提供 .
其中一些由nginx提供服务可以提高您的性能 .
如果要管理每个微服务方式并运行它,可以使用pm2运行nodejs . 节点将在端口中运行,只需在nginx中配置该端口(/etc/nginx/sites-enabled/domain.com)
使用ping检查localhost是否正在运行 .
和
这是最好的,正如你所说的那样容易
Nginx可以充当反向代理服务器,就像项目经理一样工作 . 当它收到请求时,它会分析它并将请求转发给上游(项目成员)或处理自己 . Nginx有两种基于配置方式处理请求的方法 .
提供请求
将请求转发给另一台服务器
}
Server the request
forward the request to another server
当您在端口8000上运行node.js服务器时,nginx会将请求转发给node.js.编写node.js逻辑并处理请求 . 就是你让你的nodejs服务器在nginx服务器后面运行 .
如果你想运行除nodejs之外的任何其他服务,只需在不同的端口上运行另一个服务,如Django,flask,php,并在nginx中配置它 .
回答你的问题2:
我会使用选项
b
,因为它消耗的资源少得多 . 使用选项'a',每个客户端都会导致服务器消耗大量内存,加载你需要的所有文件(即使我喜欢php,这也是它的问题之一) . 使用选项'b',您可以加载库(可重用代码)并在所有客户端请求之间共享它们 .但是要知道,如果你有多个核心,你应该调整node.js来使用它们 .
我通过Nginx代理独立的Node Express应用程序 .
因此,可以轻松安装新的应用程序,我也可以在不同位置的同一台服务器上运行其他内容 .
以下是有关使用Nginx配置示例进行设置的更多详细信息:
服务器{
听80;
听[::]:80;
server_name前端;
location / demo / pet-project {
别名/ opt / demo / pet-project / public /;
try_files $ uri $ uri / @ pet-project;
}
location @ pet-project {
重写/demo/pet-project(.*)$ 1休息;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
proxy_set_header主机$ proxy_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http:// pet_project;
proxy_redirect http:// pet_project / / demo / pet-project /;
}
}
在此示例中,您可以注意到我将在端口3000上运行的Pet Project Node应用程序挂载到http:// myhost / demo / pet-project . 首先,Nginx检查所请求的资源是否是/ opt / demo / pet-project / public /中可用的静态文件,如果是这样,它是高效的,因此我们不需要像Connect这样的冗余层静态中间件 . 然后所有其他请求都被覆盖并代理到Pet Project Node应用程序,因此Node应用程序不需要知道它实际安装在何处,因此可以纯粹通过配置移动到任何地方 . proxy_redirect是正确处理Location头的必须 . 如果在Node应用程序中使用res.redirect(),这一点非常重要 . 您可以轻松地为在不同端口上运行的多个Node应用程序复制此设置,并为其他目的添加更多位置处理程序 .
来自:http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
我在Github Build 了一个你可以克隆的存储库,vagrant-node-nginx-boilerplate
基本上
/var/www/nodeapp
的node.js应用程序是和
/etc/nginx/sites-available/
的nginx配置是Nginx作为前端服务器工作,在这种情况下代理请求到node.js服务器 . 因此,您需要为节点设置nginx配置文件 .
这就是我在Ubuntu框中所做的:
在
/etc/nginx/sites-available/
创建文件yourdomain.com
:你应该有这样的东西:
如果你想要nginx(> = 1.3.13)来处理websocket请求,请在
location /
部分添加以下行:完成此设置后,您必须启用上面配置文件中定义的站点:
在
/var/www/yourdomain/app.js
创建节点服务器应用程序并在localhost:3000
运行它测试语法错误:
重启nginx:
最后启动节点服务器:
现在你应该在yourdomain.com上看到“Hello World”
关于启动节点服务器的最后一点注意事项:您应该为节点守护程序使用某种监视系统 . 有一个很棒的tutorial on node with upstart and monit .
您还可以使用nginx设置多个域,转发到多个node.js进程 .
例如,要实现这些:
domain1.com - >到本地运行的Node.js进程http://127.0.0.1:4000
domain2.com - >到本地运行的Node.js进程http://127.0.0.1:5000
/etc/nginx/sites-enabled/domain1
In /etc/nginx/sites-enabled/domain2