Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node.js + Nginx - What now?

I've set up Node.js and Nginx on my server. Now I want to use it, but, before I start there are 2 questions:

  1. How should they work together? How should I handle the requests?
  2. There are 2 concepts for a Node.js server, which one is better:

    a. Create a separate HTTP server for each website that needs it. Then load all JavaScript code at the start of the program, so the code is interpreted once.

    b. Create one single Node.js server which handles all Node.js requests. This reads the requested files and evals their contents. So the files are interpreted on each request, but the server logic is much simpler.

It's not clear for me how to use Node.js correctly.

like image 644
Van Coding Avatar asked Feb 15 '11 20:02

Van Coding


People also ask

Can I run node js on Nginx?

Fortunately, you can cache static content, reverse proxy and load balance among multiple application servers, and manage port contention between clients using Nginx. This makes Nginx an excellent tool for increasing Node. js performance. In this tutorial, we'll show you how to reverse proxy a Node.

CAN node JS replace Nginx?

' that's provably false. Node does its low level socket handling in C just like nginx does, and implements streams, async io and other low level concepts.

Why does Nodejs need Nginx?

Originally Answered: If Node. js is used, does NGINX or Apache still need to be installed? yes, you need nginx (not apache) to complement nodejs for a serious website. the reason is nginx is easier to deploy and debug (and performs better than nodejs) for “mundane” things like handling https and serving static files.


1 Answers

Nginx works as a front end server, which in this case proxies the requests to a node.js server. Therefore you need to setup an nginx config file for node.

This is what I have done in my Ubuntu box:

Create the file yourdomain.com at /etc/nginx/sites-available/:

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

In it you should have something like:

# 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;     }  } 

If you want nginx (>= 1.3.13) to handle websocket requests as well, add the following lines in the location / section:

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

Once you have this setup you must enable the site defined in the config file above:

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

Create your node server app at /var/www/yourdomain/app.js and run it at localhost:3000

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

Test for syntax mistakes:

nginx -t 

Restart nginx:

sudo /etc/init.d/nginx restart 

Lastly start the node server:

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

Now you should see "Hello World" at yourdomain.com

One last note with regards to starting the node server: you should use some kind of monitoring system for the node daemon. There is an awesome tutorial on node with upstart and monit.

like image 173
Joao Da Silva Avatar answered Oct 11 '22 01:10

Joao Da Silva