Last updated

Web Server

Install and configure NGINX as a web server or reverse proxy on Ubuntu.

Contents

  1. Install NGINX
  2. Configure Firewall
  3. Create a Virtual Host
  4. Use as a Reverse Proxy
  5. Enable HTTPS with Let’s Encrypt
  6. Useful Commands

Install NGINX

sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx

Configure Firewall

sudo ufw allow 'Nginx Full'
sudo ufw status

Create a Virtual Host

sudo nano /etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/log/nginx/example.com_access.log;
    error_log  /var/log/nginx/example.com_error.log;
}
sudo mkdir -p /var/www/example.com
echo '

It works!

' | sudo tee /var/www/example.com/index.html sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

Use as a Reverse Proxy

Forward traffic to a backend app (e.g., Node.js on port 3000):

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass         http://127.0.0.1:3000;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Enable HTTPS with Let’s Encrypt

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Useful Commands

# Test configuration
sudo nginx -t

# Reload (no downtime)
sudo systemctl reload nginx

# Full restart
sudo systemctl restart nginx

# View error log
sudo tail -f /var/log/nginx/error.log