How To Host a Website with HTTPS Using Caddy on Linux?

When it comes to website security, HTTPS is an essential component. HTTPS (Hypertext Transfer Protocol Secure) is a protocol that encrypts data being transmitted between a website and its visitors. The encryption ensures that sensitive information like login credentials or payment details cannot be intercepted by third-party users.

Without HTTPS, websites are vulnerable to attacks like man-in-the-middle attacks and phishing scams, which can lead to significant data breaches and loss of user trust. Additionally, search engines like Google consider HTTPS a ranking factor, providing SEO benefits.

Preparing the Environment

Setting up a domain name and DNS records

First, register a domain name through providers like Namecheap or GoDaddy. Once registered, configure DNS records so visitors can find your website. Create an A record that points to your server's IP address.

Installing Caddy on your server

Caddy is a web server that simplifies HTTPS configuration using Let's Encrypt certificates. To install Caddy on Ubuntu Server, first add the repository key:

sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/gpg/gpg.155B6D79CA56EA34.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc

Then add the Caddy repository and install:

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/setup/config.deb.txt?distro=debian&version=any-version' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Configuring Caddy for HTTPS

Creating a Caddyfile

Create a Caddyfile to define your website's configuration. Open a text editor and create a basic configuration:

yourdomain.com {
    root * /var/www/html
    file_server
}

Replace "yourdomain.com" with your actual domain and "/var/www/html" with your website's root directory path.

Adding TLS Encryption

Caddy automatically obtains and renews Let's Encrypt certificates. For automatic HTTPS, simply specify your domain. For DNS validation with Cloudflare, add:

yourdomain.com {
    root * /var/www/html
    file_server
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN}
    }
}

Replace {env.CLOUDFLARE_API_TOKEN} with your actual Cloudflare API token stored as an environment variable.

Testing Your HTTPS Setup

Test your SSL configuration using SSL Labs' Server Test (https://www.ssllabs.com/ssltest/). Enter your domain name and click "Submit". Aim for an "A" grade to ensure optimal security.

Advanced Configuration Options

HTTP to HTTPS Redirects

Ensure all traffic uses HTTPS by adding automatic redirects:

yourdomain.com {
    root * /var/www/html
    file_server
    
    # Automatic HTTPS redirect is enabled by default
    encode gzip
    log
}

Configuring Subdomains

Set up subdomains by creating separate configuration blocks:

yourdomain.com {
    root * /var/www/html
    file_server
}

blog.yourdomain.com {
    root * /var/www/blog
    file_server
}

api.yourdomain.com {
    reverse_proxy localhost:3000
}

Automatic Certificate Renewal

Caddy automatically renews Let's Encrypt certificates (which expire every 90 days). No additional configuration is required, but you can customize the renewal process:

{
    auto_https on
    email admin@yourdomain.com
}

yourdomain.com {
    root * /var/www/html
    file_server
}

Troubleshooting Common Issues

DNS and Firewall Issues

Common issues include:

  • DNS misconfiguration Verify your A record points to the correct server IP

  • Firewall blocking Ensure ports 80 and 443 are open

  • Domain propagation DNS changes can take up to 48 hours to propagate globally

Check Caddy logs for detailed error information:

sudo systemctl status caddy
sudo journalctl -u caddy -f

Performance and Security Tips

  • Use CDN services to cache static content and reduce server load

  • Enable gzip compression using the encode gzip directive

  • Implement proper security headers for enhanced protection

  • Keep regular backups of your configuration and website files

Starting and Managing Caddy

Start Caddy and enable it to run automatically on boot:

sudo systemctl start caddy
sudo systemctl enable caddy
sudo systemctl reload caddy

After making changes to your Caddyfile, reload the configuration without downtime:

sudo caddy reload --config /etc/caddy/Caddyfile

Conclusion

Hosting a website with HTTPS using Caddy on Linux provides robust security with minimal configuration effort. Caddy's automatic certificate management and simple configuration syntax make it an excellent choice for developers who prioritize both security and ease of use. The automatic HTTPS features ensure your website remains secure without manual certificate renewal intervention.

Updated on: 2026-03-17T09:01:38+05:30

489 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements