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!
Top comments (0)