Comprehensive Nginx Setup Guide: From Installation to SSL Configuration
Introduction Nginx is a powerful, high-performance web server that can also function as a reverse proxy, load balancer, and HTTP cache. In this guide, we'll walk through a step-by-step process of installing Nginx, configuring your domain, and setting up SSL to secure your web application. Prerequisites Before we begin, ensure you have: A Linux server (Ubuntu/Debian recommended) Root or sudo access Basic terminal knowledge A registered domain name Step 1: Nginx Installation For Ubuntu/Debian: # Update package lists sudo apt update # Install Nginx sudo apt install nginx # Start Nginx service sudo systemctl start nginx # Enable Nginx to start on boot sudo systemctl enable nginx # Check Nginx status sudo systemctl status nginx For CentOS/RHEL: # Install Nginx sudo yum install epel-release sudo yum install nginx # Start Nginx service sudo systemctl start nginx # Enable Nginx to start on boot sudo systemctl enable nginx # Check Nginx status sudo systemctl status nginx Step 2: Firewall Configuration Open HTTP and HTTPS ports to allow web traffic: For UFW (Uncomplicated Firewall): # Allow HTTP and HTTPS sudo ufw allow 'Nginx Full' For FirewallD: # Open HTTP and HTTPS ports sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload Step 3: Domain Configuration Create a Server Block Create a new server block configuration for your domain: # Create directory for your domain sudo mkdir -p /var/www/yourdomain.com/html # Set proper permissions sudo chown -R $USER:$USER /var/www/yourdomain.com/html sudo chmod -R 755 /var/www/yourdomain.com Create Nginx configuration file: sudo nano /etc/nginx/sites-available/yourdomain.com Add the following configuration: server { listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; root /var/www/yourdomain.com/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } } Create a symlink to enable the site: # Create symlink sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/ # Test Nginx configuration sudo nginx -t # Restart Nginx sudo systemctl restart nginx Step 4: SSL Setup with Certbot Install Certbot # For Ubuntu sudo apt update sudo apt install certbot python3-certbot-nginx # For CentOS sudo yum install certbot python3-certbot-nginx Obtain SSL Certificate # Obtain and install certificate sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com During installation, Certbot will: Validate domain ownership Generate SSL certificates Update Nginx configuration automatically Set up automatic certificate renewal Verify Auto-Renewal # Test renewal process sudo certbot renew --dry-run Step 5: Additional Security Configurations Update your Nginx configuration for enhanced security: server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name yourdomain.com www.yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # Strong SSL settings ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+AESGCM:EDH+AESGCM; ssl_ecdh_curve secp384r1; ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; # Redirect HTTP to HTTPS if ($scheme != "https") { return 301 https://$host$request_uri; } } Conclusion Congratulations! You've successfully installed Nginx, configured your domain, and set up SSL encryption. Your web server is now secure, performant, and ready to host your applications. Additional Tips Regularly update Nginx and your system Monitor server logs Keep SSL certificates up to date Consider implementing additional security measures like fail2ban Troubleshooting Check Nginx logs: sudo tail -f /var/log/nginx/error.log Verify configuration: sudo nginx -t Restart service: sudo systemctl restart nginx Happy hosting!

Introduction
Nginx is a powerful, high-performance web server that can also function as a reverse proxy, load balancer, and HTTP cache. In this guide, we'll walk through a step-by-step process of installing Nginx, configuring your domain, and setting up SSL to secure your web application.
Prerequisites
Before we begin, ensure you have:
- A Linux server (Ubuntu/Debian recommended)
- Root or sudo access
- Basic terminal knowledge
- A registered domain name
Step 1: Nginx Installation
For Ubuntu/Debian:
# Update package lists
sudo apt update
# Install Nginx
sudo apt install nginx
# Start Nginx service
sudo systemctl start nginx
# Enable Nginx to start on boot
sudo systemctl enable nginx
# Check Nginx status
sudo systemctl status nginx
For CentOS/RHEL:
# Install Nginx
sudo yum install epel-release
sudo yum install nginx
# Start Nginx service
sudo systemctl start nginx
# Enable Nginx to start on boot
sudo systemctl enable nginx
# Check Nginx status
sudo systemctl status nginx
Step 2: Firewall Configuration
Open HTTP and HTTPS ports to allow web traffic:
For UFW (Uncomplicated Firewall):
# Allow HTTP and HTTPS
sudo ufw allow 'Nginx Full'
For FirewallD:
# Open HTTP and HTTPS ports
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Step 3: Domain Configuration
Create a Server Block
Create a new server block configuration for your domain:
# Create directory for your domain
sudo mkdir -p /var/www/yourdomain.com/html
# Set proper permissions
sudo chown -R $USER:$USER /var/www/yourdomain.com/html
sudo chmod -R 755 /var/www/yourdomain.com
Create Nginx configuration file:
sudo nano /etc/nginx/sites-available/yourdomain.com
Add the following configuration:
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Create a symlink to enable the site:
# Create symlink
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
# Test Nginx configuration
sudo nginx -t
# Restart Nginx
sudo systemctl restart nginx
Step 4: SSL Setup with Certbot
Install Certbot
# For Ubuntu
sudo apt update
sudo apt install certbot python3-certbot-nginx
# For CentOS
sudo yum install certbot python3-certbot-nginx
Obtain SSL Certificate
# Obtain and install certificate
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
During installation, Certbot will:
- Validate domain ownership
- Generate SSL certificates
- Update Nginx configuration automatically
- Set up automatic certificate renewal
Verify Auto-Renewal
# Test renewal process
sudo certbot renew --dry-run
Step 5: Additional Security Configurations
Update your Nginx configuration for enhanced security:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# Strong SSL settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
# Redirect HTTP to HTTPS
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}
Conclusion
Congratulations! You've successfully installed Nginx, configured your domain, and set up SSL encryption. Your web server is now secure, performant, and ready to host your applications.
Additional Tips
- Regularly update Nginx and your system
- Monitor server logs
- Keep SSL certificates up to date
- Consider implementing additional security measures like fail2ban
Troubleshooting
- Check Nginx logs:
sudo tail -f /var/log/nginx/error.log
- Verify configuration:
sudo nginx -t
- Restart service:
sudo systemctl restart nginx
Happy hosting!