Setting Up a Web Server with Nginx on Linux



If you’re looking to host your website or application on a Linux server, setting up a web server is a crucial step. Nginx, a powerful and lightweight web server, is a popular choice for many developers due to its performance and versatility. In this guide, we’ll walk you through the process of setting up Nginx on a Linux-based server to get your website up and running smoothly.

1.Choosing the Right Linux Distribution

The first step in setting up your web server is selecting the appropriate Linux distribution. Popular choices include Ubuntu, CentOS, Debian, and Fedora. Each has its strengths, but for this guide, we’ll focus on using Ubuntu, known for its user-friendly interface and extensive community support.

2.Updating the System

Before proceeding with any installations, it’s essential to update your Linux system to ensure you have the latest packages and security patches. Open the terminal and use the following commands:


sudo apt update sudo apt upgrade

3.Installing Nginx

With your system up to date, it’s time to install Nginx. Use the package manager to install Nginx on your Linux server:


sudo apt install nginx

Once the installation is complete, Nginx should start automatically. To verify its status, run:


sudosystemctl status nginx

4.Configuring Firewall

Security is of utmost importance when setting up a web server. Ensure that your firewall is properly configured to allow web traffic. By default, Nginx uses port 80 for HTTP and port 443 for HTTPS. To enable these ports, run:

bashCopy code

sudoufw allow ‘Nginx Full’

5.Testing Nginx

To verify that Nginx is correctly installed and your server is accessible, open your web browser and enter your server’s IP address or domain name. You should see the default Nginx welcome page.

6.Managing Nginx

Understanding how to manage Nginx is crucial for successful web hosting. Here are some essential commands to get you started:

  • To start Nginx if it’s not running: sudosystemctl start nginx
  • To stop Nginx: sudosystemctl stop nginx
  • To restart Nginx: sudosystemctl restart nginx
  • To check the configuration for syntax errors: sudonginx -t
  • To reload Nginx configuration after making changes: sudosystemctl reload nginx

7.Hosting a Website

Now that Nginx is up and running, you’re ready to host your website. First, create a directory for your website files:

bashsudomkdir /var/www/mywebsite

Next, assign the appropriate permissions to the directory:


sudochown -R $USER:$USER /var/www/mywebsite

Create a sample index.html file to test your website:


echo”<html><body><h1>Welcome to My Website!</h1></body></html>” | sudotee /var/www/mywebsite/index.html


8.Creating Nginx Server Block

Nginx uses server blocks (similar to virtual hosts in Apache) to host multiple websites on a single server. Create a new server block configuration file:


sudonano /etc/nginx/sites-available/mywebsite

Add the following configuration:

nginxserver { listen 80; server_nameyour_domain_or_server_IP; root /var/www/mywebsite; index index.html; location / { try_files $uri $uri/ =404; } }

9.Enabling the Server Block

To enable the server block, create a symbolic link to the sites-enabled directory:


sudoln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/

10.Testing the Configuration

Before applying the changes, it’s a good idea to test the Nginx configuration:


sudonginx -t

If the test is successful, reload Nginx to apply the new configuration:


sudosystemctl reload nginx

11.Securing Your Website with SSL/TLS

Website security is paramount, especially when dealing with sensitive information or user data. To encrypt data transmitted between your website and users, you can set up SSL/TLS certificates. Let’s use Certbot, a popular tool, to obtain and install a free SSL/TLS certificate from Let’s Encrypt:


sudo apt install certbot python3-certbot-nginx

  • Obtain the SSL certificate:


sudocertbot –nginx -d your_domain_or_server_IP

  • Certbot will guide you through the process, and once completed, it will automatically update your Nginx configuration to enable SSL.

12.Load Balancing with Nginx

As your website grows and attracts more traffic, you might need to distribute the load across multiple servers. Nginx can act as a load balancer to achieve this. Here’s a basic configuration:

  • Install Nginx and create server blocks for your backend servers:


sudo apt install nginx

  • Create multiple server blocks, each pointing to a different backend server, for example:


upstream backend { server backend_server1_ip; server backend_server2_ip; # Add more backend servers here if needed } server { listen 80; server_nameyour_domain_or_server_IP; location / { proxy_pass http://backend; } }

  • Test and reload Nginx as we did before:


sudonginx -t sudosystemctl reload nginx

Nginx will now distribute incoming requests among the specified backend servers, improving your website’s performance and reliability.

13.Caching with Nginx

Caching is essential for faster website loading times, reducing server load, and improving user experience. Nginx can serve cached content to visitors, saving server resources. To enable caching:

  • Open your server block configuration:


sudonano /etc/nginx/sites-available/mywebsite

  • Add caching directives inside the server block:


server { # … location / { proxy_pass http://backend; proxy_cachemy_cache; proxy_cache_valid 200 1d; # Cache 200 (OK) responses for 1 day # Add more caching options here as needed } }

  • Create a cache zone in Nginx configuration:


sudonano /etc/nginx/nginx.conf

Add the following within the http block:

nginxCopy code

http { # … proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g # … }

  • Save the changes and reload Nginx:


sudonginx -t sudosystemctl reload nginx

Now, Nginx will cache content from your backend servers, resulting in faster response times and reduced server load.

14.Monitoring Nginx Performance

To ensure your web server operates at peak efficiency and promptly detect and address potential issues, monitoring its performance is crucial. Fortunately, Nginx provides various tools and metrics for this purpose:

  • Nginx Status Module:

Enable the status module by adding the following configuration inside the http block in /etc/nginx/nginx.conf:


http { # … server { listen 80; server_namelocalhost; # Use your server’s domain name or IP here location /nginx_status { stub_status; allow; # Restrict access to localhost for security deny all; } } # … }

  • Save the changes and reload Nginx:


sudonginx -t sudosystemctl reload nginx

  • To view Nginx status, access the URL http://your_server_ip/nginx_status using your web browser or tools like curl.



Setting up a web server with Nginx on Linux can seem daunting, but with this comprehensive guide, you’re now equipped to handle the process with confidence. From the initial installation to advanced configurations like SSL/TLS, load balancing, and caching, you have the knowledge to create a high-performance and secure environment for hosting your websites and applications. Regularly updating and monitoring your server will ensure it continues to serve your content efficiently and reliably, making your online presence a success. Happy web hosting!

Remember that as technology evolves, staying up-to-date with the latest Nginx releases and security practices is essential for maintaining a safe and optimized web server. Regularly refer to Nginx’s official documentation and community resources to make the most of this powerful web server on your Linux system.


Leave a Reply

Your email address will not be published. Required fields are marked *

Open chat
Can we help you?