🌐Securing an NGINX Server on AWS EC2 with Custom Domain Using Let's Encrypt SSL

Ashwini SinghAshwini Singh
3 min read

Setting up a secure web server is a foundational DevOps skill. In this post, you'll learn how to

βœ… Launch an EC2 instance
βœ… Set up NGINX with a custom Hello page
βœ… Secure it with a free SSL certificate using Let's Encrypt
βœ… Connect your domain using Route 53


🧰 Prerequisites

  • AWS account

  • A registered domain (Route 53, GoDaddy, etc.)

  • PuTTY (Windows) or terminal (Linux/macOS)

  • Basic Linux command-line knowledge


☁️ Step 1: Launch an EC2 Instance

  1. Go to the AWS EC2 Dashboard

  2. Click Launch Instance

  3. Choose OS: Ubuntu 22.04 or Amazon Linux 2

  4. Select instance type: t3.medium

  5. Configure in a Public Subnet of a VPC

  6. Enable inbound rules in the Security Group

    • TCP 22 (SSH)

    • TCP 80 (HTTP)

    • TCP 443 (HTTPS)

  7. Download the .pem key pair


πŸ’» Step 2: Connect via SSH using PuTTY (Windows)

  1. Open PuTTYgen

    • Load your .pem file

    • Click Save Private Key β†’ This generates .ppk

  2. Open PuTTY

    • Host Name: ubuntu@your-ec2-ip

    • Go to Connection β†’ SSH β†’ Auth

    • Load the .ppk file

    • Click Open β†’ You’re connected


🌍 Step 3: Point Domain to EC2

  1. Go to Route 53 β†’ Hosted Zones

  2. Click Create Record

    • Type: A

    • Name: @ or www

    • Value: your EC2 IP

πŸ“Œ Test: Visit http://yourdomain.com β€” The NGINX default page should appear.


πŸ”§ Step 4: Install NGINX + Hello Page

sudo apt update
sudo apt install nginx -y
echo "<h1>Hello from AWS + NGINX</h1>" | sudo tee /var/www/html/index.html
sudo systemctl restart nginx

Access it at http://yourdomain.com


πŸ” Step 5: Add Free SSL with Let’s Encrypt

Install Certbot:

sudo apt install certbot python3-certbot-nginx -y

Run Certbot for your domain:

sudo certbot --nginx -d yourdomain.com

Test auto-renewal:

sudo certbot renew --dry-run

🧠 Bonus: Editing the NGINX Config

sudo vim /etc/nginx/sites-available/default

Example Config:

server {
    listen 80;
    server_name yourdomain.com;

    root /var/www/html;
    index index.html;

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

Save and reload:

sudo systemctl reload nginx

πŸ“Œ Project Structure

πŸ“‚ /var/www/html/index.html       # Custom hello page
πŸ“‚ /etc/nginx/sites-available     # NGINX site configs
πŸ” SSL: Managed by Certbot
🌐 Domain: Managed via Route 53

πŸ“Š Architecture Diagram

Image description

🏁 Final Output

https://yourdomain.com

With NGINX serving your page securely over HTTPS

Conclusion

By adhering to this guide, you have successfully established a secure NGINX server on AWS EC2, featuring a custom domain and SSL encryption from Let's Encrypt. This essential DevOps skill not only improves the security of your web applications but also ensures a professional and reliable online presence. With your domain correctly configured and SSL implemented, your server is now equipped to manage traffic securely, offering users a seamless and protected browsing experience. Continue to explore and enhance your skills to further optimise and scale your infrastructure.

0
Subscribe to my newsletter

Read articles from Ashwini Singh directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ashwini Singh
Ashwini Singh