node.js - Node.js Nginx好用吗?

  显示原文与译文双语对照的内容

我在服务器上设置了 node.js 和 Nginx 。 现在我想使用它,但在开始之前,有 2个问题:

  1. 他们应该如何协同工作? 我应该如何处理请求?
  2. 有 2个 node.js 服务器概念,其中一个更好:

    为每个需要它的网站创建一个单独的HTTP服务器。 然后加载程序开头的所有JavaScript代码,这样代码就会被解释一次。

    创建一个单独的node.js 服务器来处理所有 node.js 请求。 这将读取请求的文件和evals的内容。 所以每个请求都会解释这些文件,但是服务器逻辑要简单得多。

我不清楚如何正确使用 node.js 。

时间:

Nginx 作为前端服务器,在本例中将请求代理给 node.js 服务器。 因此,你需要为节点设置一个 Nginx 配置文件。

这就是我在我的Ubuntu框中所做的:

创建文件 yourdomain/etc/nginx/sites-available/:


vim/etc/nginx/sites-available/yourdomain

在其中,你应该有类似:


# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
 server 127.0.0.1:3000;
 keepalive 8;
}

# the nginx server instance
server {
 listen 0.0.0.0:80;
 server_name yourdomain.com yourdomain;
 access_log/var/log/nginx/yourdomain.log;

 # pass the request to the node.js server with the correct headers
 # and much more can be added, see nginx config options
 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://app_yourdomain/;
 proxy_redirect off;
 }
 }

如果希望 Nginx (> = 1.3.13 ) 处理 web socket请求,请在 location/ 部分中添加以下行:


proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection"upgrade";

安装完成后,必须启用上面配置文件中定义的站点:


cd/etc/nginx/sites-enabled/
ln -s/etc/nginx/sites-available/yourdomain yourdomain

/var/www/yourdomain/app.js 处创建节点服务器应用程序并在 localhost:3000 处运行


var http = require('http');

http.createServer(function (req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello Worldn');
}).listen(3000,"127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

重新启动 Nginx:


sudo/etc/init.d/nginx restart

最后启动节点服务器:


cd/var/www/yourdomain/&& node app.js

现在你应该看到"欢迎世界"在 yourdomain.com

关于启动节点服务器的最后一个注意事项: 你应该为节点守护进程使用某种监视系统。 在节点上有一个很棒的教程,并监视

回答你的问题 2:

我将使用选项 b,因为它消耗的资源更少。 使用选项'一个',每个客户端将导致服务器消耗大量内存,加载你需要的所有文件。 使用选项'b',你可以加载库( 可以重用代码) 并在所有客户端请求中共享它们。

但是如果你有多个内核,你应该调整 node.js 来使用它们。

我在Github中创建了一个存储库,你可以克隆,vagrant-node-nginx-boilerplate

基本上 node.js 应用在 /var/www/nodeapp


var http = require('http');
http.createServer(function (req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello Worldn');
}).listen(4570, '127.0.0.1');

console.log('Node Server running at 127.0.0.1:4570/');

Nginx的配置是 /etc/nginx/sites-available/


server {
 listen 80 default_server;
 listen [::]:80 default_server ipv6only=on;

 root/var/www/nodeapp;
 index index.html index.htm;

 server_name localhost;

 location/{
 proxy_pass http://127.0.0.1:4570;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection 'upgrade';
 proxy_set_header Host $host;
 proxy_cache_bypass $http_upgrade;
 }
}

Node.js 随以 Nginx 配置。


$ sudo nano/etc/nginx/sites-available/subdomain.your_domain.com

添加以下配置,以便 Nginx 作为代理重定向到端口 3000,当我们来自"subdomain.your_domain.com" 时来自服务器的通信


upstream subdomain.your_domain.com {
server 127.0.0.1:3000;
}
server {
listen 0.0.0.0:80;
server_name subdomain.your_domain.com;
access_log/var/log/nginx/subdomain.your_domain.access.log;
error_log/var/log/nginx/subdomain.your_domain.error.log debug;
location/{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://subdomain.your_domain.com;
proxy_redirect off;
}
}

...