Last updated
Web Server
Install and configure NGINX as a web server or reverse proxy on Ubuntu.
Contents
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