Node.js + Nginx

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

  • 他们应该如何一起工作? 我应该如何处理这些请求?
  • Node.js服务器有两个概念,哪一个更好:

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

    湾 创建一个处理所有Node.js请求的Node.js服务器。 这会读取请求的文件并删除它们的内容。 因此,每个请求都会解释这些文件,但服务器逻辑要简单得多。

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


    Nginx作为前端服务器,在这种情况下,它将请求代理到node.js服务器。 因此您需要为节点设置一个nginx配置文件。

    这是我在Ubuntu盒子里完成的:

    /etc/nginx/sites-available/创建文件yourdomain.com

    vim /etc/nginx/sites-available/yourdomain.com
    

    在它你应该有这样的东西:

    # 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 80;
        listen [::]:80;
        server_name yourdomain.com www.yourdomain.com;
        access_log /var/log/nginx/yourdomain.com.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)处理websocket请求,请在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.com yourdomain.com
    

    /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 -t
    

    重新启动nginx:

    sudo /etc/init.d/nginx restart
    

    最后启动节点服务器:

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

    现在您应该在yourdomain.com上看到“Hello World”

    关于启动节点服务器的最后一个注意事项是:您应该为节点守护进程使用某种监视系统。 节点上有一个令人敬畏的教程,有暴发户和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的/启用的站点- / DOMAIN1

    server {
        listen 80;
        listen [::]:80;
        server_name domain1.com;
        access_log /var/log/nginx/domain1.access.log;
        location / {
            proxy_pass    http://127.0.0.1:4000/;
        }
    }
    

    在/ etc / nginx / sites-enabled / domain2中

    server {
        listen 80;
        listen [::]:80;
        server_name domain2.com;
        access_log /var/log/nginx/domain2.access.log;
        location / {
            proxy_pass    http://127.0.0.1:5000/;
        }
    }
    

    您也可以在一个服务器配置中为应用程序设置不同的网址:

  • 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中

    server {
        listen 80;
        listen [::]:80;
        server_name yourdomain.com;
    
        location ^~ /app1/{
            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://127.0.0.1:3000/;
        }
    
        location ^~ /app2/{
            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://127.0.0.1:4000/;
        }
    }
    

    重新启动nginx:

    sudo service nginx restart
    

    开始申请。

    节点app1.js

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

    节点app2.js

    var http = require('http');
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello from app2!n');
    }).listen(4000, "127.0.0.1");
    console.log('Server running at http://127.0.0.1:4000/');
    
    链接地址: http://www.djcxy.com/p/52493.html

    上一篇: Node.js + Nginx

    下一篇: f(n)=n^log(n) complexity polynomial or exponential