How to Deploy a Node.js Application to a Server with Nginx
Deploying a Node.js application to a server with Nginx is a great way to ensure that your application is up and running quickly and securely. Nginx is a powerful web server that provides a range of features, including caching, load balancing, and security. With Nginx, you can set up multiple Node.js applications on the same server and keep them running smoothly.
Using Nginx as a reverse proxy has many benefits. It increases website performance by caching static content, reducing server load, and providing load balancing and failover capabilities. It also provides better security by hiding the origin server and protecting against DDoS attacks. Additionally, Nginx can be used as a web server, providing a single point of entry for multiple applications and services, and can be used to route requests based on URL or other criteria.
In this guide, we’ll discuss how to deploy a Node.js application to a server with Nginx.
Install Nginx
sudo apt update
sudo apt install nginxSetup Firewall
If you already have setup a firewall, ensure that Nginx is allowed.
ufw app listThe command above should list out the available applications.
If you have no firewall yet, let’s install one!
sudo apt install ufwBefore you do anything further, you will have to ensure that the firewall allows ssh so that you won’t get locked out when you try to access your server via ssh again.
ufw allow sshEnsure that you have both Nginx and OpenSSH listed in the allowed apps by running the command:
ufw app listTo allow Nginx, run the command below. Select any of the commands depending on your site configuration.
sudo ufw allow 'Nginx Full'
sudo ufw allow 'Nginx HTTPS'
sudo ufw allow 'Nginx HTTP'Configure Nginx
To check the status of Nginx, enter the command:
sudo systemctl status nginxTo start the Nginx,
sudo systemctl start nginxLet’s create a directory inside the directory /var/www
sudo mkdir -p /var/www/domain.com/srcEnsure that you have set correct permissions:
sudo chmod -R 755 /var/www/domain.com
sudo chown -R $USER:$USER /var/www/domain.com/srcNext, create a simple html file:
nano /var/www/domain.com/src/index.html<html>
<head>
<title>domain</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>To save and close nano, Ctrl + O > Enter > Ctrl + X.
Now to deploy this page, you will need to add a configuration at /etc/nginx/sites-available and enable it at /etc/nginx/sites-enabled/
sudo nano /etc/nginx/sites-available/domain.comserver {
listen 80;
listen [::]:80;
root /var/www/domain.com/src;
index.html;
#server names or ip addresses are separated by spaces
server_name domain.com www.domain.com ipaddress;
#error_page 404 /not-found.html;
location / {
try_files $uri $uri/ =404;
}
}sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/domain.comTo test if configuration is correct:
nginx -tIf no issues occur, reload Nginx:
sudo systemctl reload nginxFinally, it’s deployed. Open a browser and enter your server’s IP address or domain name.
Conclusion
In conclusion, deploying a Node.js application to a server with Nginx is a straightforward process that requires minimal setup. With the right configuration, you can easily deploy your Node.js application and ensure it is running optimally. With Nginx, you can also ensure that your application is secure and that it can handle any incoming traffic.
