{"id":11228,"date":"2025-04-18T09:47:44","date_gmt":"2025-04-18T09:47:44","guid":{"rendered":"https:\/\/mainvps.net\/blog\/?p=11228"},"modified":"2025-05-19T11:14:59","modified_gmt":"2025-05-19T11:14:59","slug":"using-caddy-as-a-reverse-proxy","status":"publish","type":"post","link":"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/","title":{"rendered":"Ultimate Guide to Using Caddy as a Reverse Proxy"},"content":{"rendered":"\n<p>Here\u2019s a complete, beginner-friendly guide to setting up a powerful, secure, and modern reverse proxy using <strong>Caddy<\/strong> \u2014 the web server that does it all with minimal configuration.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#What_is_a_Reverse_Proxy\" >What is a Reverse Proxy?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Why_Choose_Caddy_as_Your_Reverse_Proxy\" >Why Choose Caddy as Your Reverse Proxy?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#How_Caddy_Stands_Out_From_Nginx_and_Apache\" >How Caddy Stands Out From Nginx and Apache<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#What_You_Need_Before_You_Begin_Using_Caddy_Reverse_Proxy\" >What You Need Before You Begin Using Caddy Reverse Proxy<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#System_Requirements\" >System Requirements<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Installing_Caddy_on_Linux_UbuntuDebian\" >Installing Caddy on Linux (Ubuntu\/Debian)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Quick_Comparison_Caddy_vs_Nginx_for_Reverse_Proxy\" >Quick Comparison: Caddy vs Nginx for Reverse Proxy<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Understanding_the_Caddyfile\" >Understanding the Caddyfile<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#What_is_a_Caddyfile\" >What is a Caddyfile?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Basic_Syntax_of_the_Caddyfile\" >Basic Syntax of the Caddyfile<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Where_to_Place_the_Caddyfile\" >Where to Place the Caddyfile<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Setting_Up_a_Basic_Caddy_Reverse_Proxy\" >Setting Up a Basic Caddy Reverse Proxy<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Forwarding_Requests_to_Another_Server\" >Forwarding Requests to Another Server<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Example_Configuration_for_a_Web_App\" >Example Configuration for a Web App<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Testing_Your_Setup\" >Testing Your Setup<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Advanced_Caddy_Reverse_Proxy_Features\" >Advanced Caddy Reverse Proxy Features<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Automatic_HTTPS_with_Lets_Encrypt\" >Automatic HTTPS with Let\u2019s Encrypt<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Load_Balancing_with_Caddy\" >Load Balancing with Caddy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Caching_and_Compression\" >Caching and Compression<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Securing_Your_Reverse_Proxy_Setup\" >Securing Your Reverse Proxy Setup<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Using_HTTPS_and_Redirect\" >Using HTTPS and Redirect<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Blocking_Unwanted_IPs\" >Blocking Unwanted IPs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Logging_and_Monitoring_with_Caddy\" >Logging and Monitoring with Caddy<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Real_World_Use_Cases_for_Caddy_Reverse_Proxy\" >Real World Use Cases for Caddy Reverse Proxy<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Hosting_Multiple_Sites_on_One_Server\" >Hosting Multiple Sites on One Server<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Reverse_Proxy_for_Docker_Containers\" >Reverse Proxy for Docker Containers<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Proxying_API_Traffic\" >Proxying API Traffic<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Troubleshooting_Common_Issues\" >Troubleshooting Common Issues<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#SSL_Certificate_Problems\" >SSL Certificate Problems<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Port_Conflicts_and_Firewall_Rules\" >Port Conflicts and Firewall Rules<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Debugging_Logs_and_Errors\" >Debugging Logs and Errors<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#Conclusion\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#FAQs\" >FAQs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#1_Is_Caddy_better_than_Nginx_for_reverse_proxy\" >1. Is Caddy better than Nginx for reverse proxy?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#2_Can_Caddy_reverse_proxy_to_localhost_services\" >2. Can Caddy reverse proxy to localhost services?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#3_How_do_I_enable_HTTP3_in_Caddy\" >3. How do I enable HTTP\/3 in Caddy?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#4_Does_Caddy_support_load_balancing\" >4. Does Caddy support load balancing?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/#5_Is_Caddy_good_for_production_environments\" >5. Is Caddy good for production environments?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_a_Reverse_Proxy\"><\/span><strong>What is a Reverse Proxy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Let\u2019s break it down. Imagine you&#8217;re at a busy restaurant. Instead of talking to the chef directly, you give your order to a server. The server takes your request, passes it to the kitchen, and then brings your food back. That server? That\u2019s your <strong>reverse proxy<\/strong>.<\/p>\n\n\n\n<p>In web development terms, a reverse proxy sits between the client (the browser or app making a request) and the backend server (your application). It handles incoming traffic and forwards it to the appropriate server. You can think of it as your website\u2019s gatekeeper \u2014 one that can manage security, load balancing, HTTPS, and more.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Choose_Caddy_as_Your_Reverse_Proxy\"><\/span><strong>Why Choose Caddy as Your Reverse Proxy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>There are quite a few reverse proxy tools out there \u2014 Nginx, Apache, Traefik. But Caddy? It\u2019s the <strong>new-age web server with brains and beauty<\/strong>. Here\u2019s why developers love it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Automatic HTTPS<\/strong>: No more messing with certbot and cron jobs. Caddy handles TLS certificates using Let\u2019s Encrypt right out of the box.<\/li>\n\n\n\n<li><strong>Simpler Config<\/strong>: Its config file, the <em>Caddyfile<\/em>, is human-readable and incredibly easy to write.<\/li>\n\n\n\n<li><strong>Built-in Features<\/strong>: Reverse proxy, load balancing, file serving, static site hosting, and more \u2014 all built-in.<\/li>\n\n\n\n<li><strong>Modern by Default<\/strong>: It supports HTTP\/2 and HTTP\/3, and it&#8217;s written in Go for performance and concurrency.<\/li>\n<\/ul>\n\n\n\n<p>Whether you\u2019re a solo developer running a portfolio site or managing services for a startup, <strong>Caddy simplifies your workflow<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Caddy_Stands_Out_From_Nginx_and_Apache\"><\/span><strong>How Caddy Stands Out From Nginx and Apache<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Let\u2019s throw down a quick comparison:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Caddy<\/th><th>Nginx<\/th><th>Apache<\/th><\/tr><\/thead><tbody><tr><td>HTTPS Setup<\/td><td>Automatic<\/td><td>Manual<\/td><td>Manual<\/td><\/tr><tr><td>Configuration<\/td><td>Simple<\/td><td>Medium<\/td><td>Complex<\/td><\/tr><tr><td>Default HTTP\/3<\/td><td>Yes<\/td><td>No (manual)<\/td><td>No<\/td><\/tr><tr><td>Language<\/td><td>Go<\/td><td>C<\/td><td>C<\/td><\/tr><tr><td>Dynamic Config<\/td><td>Yes (API)<\/td><td>Limited<\/td><td>No<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Caddy is <strong>designed for simplicity and automation<\/strong>. With Nginx or Apache, you might spend hours fiddling with configuration files and SSL. Caddy trims that down to just a few lines. It\u2019s like upgrading from a flip phone to a smartphone \u2014 everything just works.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_You_Need_Before_You_Begin_Using_Caddy_Reverse_Proxy\"><\/span><strong>What You Need Before You Begin Using Caddy Reverse Proxy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"System_Requirements\"><\/span><strong>System Requirements<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Caddy can be used on all major operating systems, such as Linux, Windows, and macOS.\u00a0If you&#8217;re looking to use a reverse proxy in commercial production environments,\u00a0<strong>Ubuntu or Debian-based Linux distros<\/strong>\u00a0are a secure and reliable option.<\/p>\n\n\n\n<p>Here\u2019s what you need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A machine running Ubuntu\/Debian (or any <a href=\"https:\/\/mainvps.net\/linux-vps-hosting\">Linux distro<\/a>)<\/li>\n\n\n\n<li>Root or sudo access<\/li>\n\n\n\n<li>A domain name (e.g., <code>example.com<\/code>) pointed to your server IP<\/li>\n\n\n\n<li>Basic knowledge of Linux terminal commands<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Installing_Caddy_on_Linux_UbuntuDebian\"><\/span><strong>Installing Caddy on Linux (Ubuntu\/Debian)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Installation is surprisingly easy. Just open a terminal and run:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<br><\/em><\/strong><br>sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https<br>curl -1sLf 'https:\/\/dl.cloudsmith.io\/public\/caddy\/stable\/gpg.key' | sudo gpg --dearmor -o \/usr\/share\/keyrings\/caddy-archive-keyring.gpg<br>curl -1sLf 'https:\/\/dl.cloudsmith.io\/public\/caddy\/stable\/debian.deb.txt' | sudo tee \/etc\/apt\/sources.list.d\/caddy-stable.list<br>sudo apt update<br>sudo apt install caddy<code><br><\/code><\/pre>\n\n\n\n<p>Boom. Caddy is now installed and running as a systemd service.<\/p>\n\n\n\n<p>Check it:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<br><\/em><\/strong><br>caddy version<br><\/pre>\n\n\n\n<p>You\u2019ll see something like <code>v2.7.5<\/code> \u2014 that means you&#8217;re good to go.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quick_Comparison_Caddy_vs_Nginx_for_Reverse_Proxy\"><\/span><strong>Quick Comparison: Caddy vs Nginx for Reverse Proxy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Want to proxy a web app on port 3000?<\/p>\n\n\n\n<p>With <strong>Nginx<\/strong>, you&#8217;d write something like:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>nginx<\/em><\/strong><br><strong><em><br><\/em><\/strong>server {<br>    listen 80;<br>    server_name example.com;<br><br>    location \/ {<br>        proxy_pass http:\/\/localhost:3000;<br>        proxy_set_header Host $host;<br>    }<br>}<code><br><\/code><\/pre>\n\n\n\n<p>With <strong>Caddy<\/strong>, it\u2019s just:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>example.com {<br>    reverse_proxy localhost:3000<br>}<code><br><\/code><\/pre>\n\n\n\n<p>That&#8217;s it. Seriously.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Understanding_the_Caddyfile\"><\/span><strong>Understanding the Caddyfile<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_a_Caddyfile\"><\/span><strong>What is a Caddyfile?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Think of the <strong>Caddyfile<\/strong> as your site&#8217;s mission control. It\u2019s a plain text file where you define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Domains<\/li>\n\n\n\n<li>Reverse proxy rules<\/li>\n\n\n\n<li>SSL settings<\/li>\n\n\n\n<li>Static file paths<\/li>\n\n\n\n<li>Logging and more<\/li>\n<\/ul>\n\n\n\n<p>The magic lies in its <strong>simplicity<\/strong> \u2014 no complex syntax or verbose directives.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Basic_Syntax_of_the_Caddyfile\"><\/span><strong>Basic Syntax of the Caddyfile<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Here\u2019s a basic template:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><strong><em><br><\/em><\/strong><code>yourdomain.com {<br>    reverse_proxy localhost:3000<br>}<\/code><\/pre>\n\n\n\n<p>Want to add compression and file serving?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>yourdomain.com {<br>    encode gzip<br>    root * \/var\/www\/html<br>    file_server<br>}<\/pre>\n\n\n\n<p>It\u2019s that readable. You don\u2019t need to memorize arcane syntax.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Where_to_Place_the_Caddyfile\"><\/span><strong>Where to Place the Caddyfile<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>By default, the Caddyfile is located at:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>\/etc\/caddy\/Caddyfile<\/pre>\n\n\n\n<p>After making changes, reload Caddy:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>sudo systemctl reload caddy<\/pre>\n\n\n\n<p>Always validate your config before restarting:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><em>bash<\/em><\/strong><br><br>caddy validate --config \/etc\/caddy\/Caddyfile<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Setting_Up_a_Basic_Caddy_Reverse_Proxy\"><\/span><strong>Setting Up a Basic Caddy Reverse Proxy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Forwarding_Requests_to_Another_Server\"><\/span><strong>Forwarding Requests to Another Server<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Let\u2019s say your Node.js app is running on <code>localhost:3000<\/code>, and you want visitors to see it when they visit <code>yourdomain.com<\/code>.<\/p>\n\n\n\n<p>Your Caddyfile should look like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>yourdomain.com {<br>    reverse_proxy localhost:3000<br>}<br><br>Caddy will:<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Route HTTP\/HTTPS requests to port 3000<\/li>\n\n\n\n<li>Automatically issue a free SSL cert via Let\u2019s Encrypt<\/li>\n\n\n\n<li>Renew that cert before it expires<\/li>\n\n\n\n<li>Handle HTTP to HTTPS redirects<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Example_Configuration_for_a_Web_App\"><\/span><strong>Example Configuration for a Web App<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Let\u2019s level it up. Here\u2019s a reverse proxy for a backend API and a static frontend:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>api.yourdomain.com {<br>    reverse_proxy localhost:5000<br>}<br><br>www.yourdomain.com {<br>    root * \/var\/www\/frontend<br>    file_server<br>}<code><br><\/code><\/pre>\n\n\n\n<p>This lets you host a frontend on one subdomain and a backend API on another \u2014 all neatly handled by Caddy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testing_Your_Setup\"><\/span><strong>Testing Your Setup<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Once you&#8217;ve added your config to the Caddyfile and reloaded:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>sudo systemctl reload caddy<br><\/pre>\n\n\n\n<p>Open your browser and go to <code>https:\/\/yourdomain.com<\/code>. If your app shows up, congrats \u2014 you\u2019ve just set up a reverse proxy <strong>with free SSL and zero headaches<\/strong>.<\/p>\n\n\n\n<p>Continuing with the next part of the article (Headings 6\u201310) with detailed, humanized, and SEO-optimized content:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Advanced_Caddy_Reverse_Proxy_Features\"><\/span><strong>Advanced Caddy Reverse Proxy Features<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Automatic_HTTPS_with_Lets_Encrypt\"><\/span><strong>Automatic HTTPS with Let\u2019s Encrypt<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>One of the <strong>most powerful features of Caddy<\/strong> is its built-in support for HTTPS \u2014 and it doesn\u2019t just support it, it <em>automates<\/em> it.<\/p>\n\n\n\n<p>When you configure your domain in the Caddyfile and point your DNS to your server, Caddy will:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Request an SSL certificate from Let\u2019s Encrypt<\/li>\n\n\n\n<li>Handle the HTTP-01 challenge automatically<\/li>\n\n\n\n<li>Install the certificate<\/li>\n\n\n\n<li>Automatically renew it before it expires<\/li>\n<\/ul>\n\n\n\n<p>All you have to do is <strong>use your domain in the Caddyfile<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>yourdomain.com {<br>    reverse_proxy localhost:3000<br>}<\/pre>\n\n\n\n<p>No certbot, no cron jobs, no pain.<\/p>\n\n\n\n<p>This feature alone makes Caddy a top choice for developers who want secure deployments without jumping through hoops.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Load_Balancing_with_Caddy\"><\/span><strong>Load Balancing with Caddy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Caddy can distribute incoming requests across multiple upstream servers. This is great if you have several instances of your app running \u2014 maybe in Docker containers or on different ports.<\/p>\n\n\n\n<p>Example of a simple round-robin load balancer:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>yourdomain.com {<br>    reverse_proxy localhost:3000 localhost:3001 localhost:3002<br>}<\/pre>\n\n\n\n<p>You can even use health checks and fine-tune the balancing policy:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>arduino<\/em><\/strong><br><br>yourdomain.com {<br>    reverse_proxy localhost:3000 localhost:3001 {<br>        lb_policy random<br>        health_path \/health<br>        health_interval 10s<br>    }<br>}<\/pre>\n\n\n\n<p>This makes Caddy a powerful tool not just for routing, but for <strong>smart traffic management<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Caching_and_Compression\"><\/span><strong>Caching and Compression<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Caddy also supports compression and can integrate with caching plugins.<\/p>\n\n\n\n<p>For gzip or zstd compression, just add:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>yourdomain.com {<br>    encode gzip zstd<br>    reverse_proxy localhost:3000<br>}<\/pre>\n\n\n\n<p>While Caddy doesn&#8217;t include a built-in full-page caching layer like Varnish, it supports third-party plugins and header controls to help cache assets via browser or CDN.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Securing_Your_Reverse_Proxy_Setup\"><\/span><strong>Securing Your Reverse Proxy Setup<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Using_HTTPS_and_Redirect\"><\/span><strong>Using HTTPS and Redirect<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Caddy defaults to HTTPS. But if you want to explicitly redirect all HTTP traffic to HTTPS (just to be sure), you can do this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>http:\/\/yourdomain.com {<br>    redir https:\/\/yourdomain.com{uri}<br>}<br><br>https:\/\/yourdomain.com {<br>    reverse_proxy localhost:3000<br>}<br><\/pre>\n\n\n\n<p>This ensures any user visiting with just <code>http:\/\/<\/code> gets safely bumped to the secure version of your site.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Blocking_Unwanted_IPs\"><\/span><strong>Blocking Unwanted IPs<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Want to block bots or restrict access to specific IPs? Use the <code>remote_ip<\/code> directive:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>scss<\/em><\/strong><br><br>yourdomain.com {<br>    @blocked {<br>        remote_ip 192.168.0.10<br>    }<br>    respond @blocked \"Access Denied\" 403<br><br>    reverse_proxy localhost:3000<br>}<code><br><\/code><\/pre>\n\n\n\n<p>This rule denies access to a specific IP but can be customized for ranges, <strong>allowlisting<\/strong>, or <strong>denylisting<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Logging_and_Monitoring_with_Caddy\"><\/span><strong>Logging and Monitoring with Caddy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Caddy supports access and error logs out of the box. You can customize them like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>lua<\/em><\/strong><br><br>yourdomain.com {<br>    log {<br>        output file \/var\/log\/caddy\/access.log<br>        format json<br>    }<br><br>    reverse_proxy localhost:3000<br>}<code><br><\/code><\/pre>\n\n\n\n<p>Use tools like Grafana, Prometheus, or any ELK stack to monitor your logs for insights or alerts. You can also view live logs using:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>journalctl -u caddy -f<br><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Real_World_Use_Cases_for_Caddy_Reverse_Proxy\"><\/span><strong>Real World Use Cases for Caddy Reverse Proxy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hosting_Multiple_Sites_on_One_Server\"><\/span><strong>Hosting Multiple Sites on One Server<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>With Caddy, hosting multiple domains is as simple as stacking blocks. Here\u2019s how it looks:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>siteone.com {<br>    reverse_proxy localhost:3000<br>}<br><br>sitetwo.com {<br>    reverse_proxy localhost:4000<br>}<code><br><\/code><\/pre>\n\n\n\n<p>Each domain gets its own SSL certificate, and Caddy handles it all with zero user interaction. This is ideal for developers or agencies hosting multiple client projects.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Reverse_Proxy_for_Docker_Containers\"><\/span><strong>Reverse Proxy for Docker Containers<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Docker and Caddy are best friends. Spin up apps in containers, expose their ports, and let Caddy handle the routing:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>api.example.com {<br>    reverse_proxy 172.17.0.2:5000<br>}<br><br>app.example.com {<br>    reverse_proxy 172.17.0.3:3000<br>}<br><\/pre>\n\n\n\n<p>You can use Docker networks to dynamically assign IPs and even use Caddy Docker plugins to auto-configure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Proxying_API_Traffic\"><\/span><strong>Proxying API Traffic<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Need to route API traffic securely? No problem.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>css<\/em><\/strong><br><br>api.example.com {<br>    reverse_proxy localhost:8080<br>    header_up X-Real-IP {remote_host}<br>    header_up X-Forwarded-Proto {scheme}<br>}<code><br><\/code><\/pre>\n\n\n\n<p>This passes through user IP and scheme data, perfect for logging or behavior tracking in your app.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Troubleshooting_Common_Issues\"><\/span><strong>Troubleshooting Common Issues<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SSL_Certificate_Problems\"><\/span><strong>SSL Certificate Problems<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>One of the most common hiccups when setting up Caddy is SSL errors. But don\u2019t worry \u2014 they\u2019re usually easy to fix. Here are a few things to check if HTTPS isn\u2019t working:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>DNS is not properly configured<\/strong>: Make sure your domain points to the server IP.<\/li>\n\n\n\n<li><strong>Ports 80 and 443 are blocked<\/strong>: These must be open for Caddy to perform Let\u2019s Encrypt challenges.<\/li>\n\n\n\n<li><strong>Duplicate configs<\/strong>: If another web server like Nginx or Apache is running on the same ports, Caddy won\u2019t be able to bind.<\/li>\n<\/ul>\n\n\n\n<p>You can view logs with:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>journalctl -u caddy -f<\/pre>\n\n\n\n<p>Look for entries related to TLS or Let\u2019s Encrypt \u2014 they&#8217;ll often tell you what went wrong.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Port_Conflicts_and_Firewall_Rules\"><\/span><strong>Port Conflicts and Firewall Rules<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Another issue? <strong>Port conflicts<\/strong>. If something else (like Nginx) is running on port 80 or 443, Caddy can\u2019t bind.<\/p>\n\n\n\n<p>To check which process is using a port:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>sudo lsof -i :80<\/pre>\n\n\n\n<p>Kill the conflicting process or disable it. Also, make sure your firewall allows HTTP and HTTPS:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>bash<\/em><\/strong><br><br>sudo ufw allow 80,443\/tcp<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Debugging_Logs_and_Errors\"><\/span><strong>Debugging Logs and Errors<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Caddy is very verbose with logs (in a good way). If you run into trouble:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the <code>caddy validate<\/code> command to test config syntax<\/li>\n\n\n\n<li>Use system logs to find real-time errors<\/li>\n\n\n\n<li>Enable custom log outputs in your Caddyfile for more visibility<\/li>\n<\/ul>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>pgsql<\/em><\/strong><br><br>log {<br>    output file \/var\/log\/caddy\/custom.log<br>    level DEBUG<br>}<\/pre>\n\n\n\n<p>Debugging Caddy is usually smoother than other servers due to the fact that the logs are more organized and easier to read.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span><strong>Conclusion<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Utilizing\u00a0<strong>Caddy as reverse proxy<\/strong>\u00a0isn&#8217;t only a smart choice -it&#8217;s also an absolute\u00a0<em>game changer<\/em>.\u00a0If you&#8217;re routing traffic to backend applications, hosting multiple domains, or protecting your connections using HTTPS Caddy can simplify the whole procedure.<\/p>\n\n\n\n<p>Its modern architecture, built-in <a href=\"https:\/\/mainvps.net\/blog\/free-ssl-vs-paid-ssl-guide\/\">SSL<\/a>, and easy-to-understand configuration make it <strong>an ideal choice for developers<\/strong> who want less hassle and more automation. You don\u2019t need to wrestle with outdated configs or third-party tools \u2014 just write a clean Caddyfile and let it handle the rest.<\/p>\n\n\n\n<p>In short, if you&#8217;re looking for a lightweight, secure, and modern way to manage your web traffic, <strong>Caddy is a solid choice<\/strong> that balances power with simplicity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"FAQs\"><\/span><strong>FAQs<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_Is_Caddy_better_than_Nginx_for_reverse_proxy\"><\/span><strong>1. Is Caddy better than Nginx for reverse proxy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Yes, especially if ease of use, automatic HTTPS, and minimal configuration are priorities. Nginx is powerful but has a steeper learning curve. Caddy simplifies many tasks with fewer lines of code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_Can_Caddy_reverse_proxy_to_localhost_services\"><\/span><strong>2. Can Caddy reverse proxy to localhost services?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Absolutely. Caddy can proxy to any service on your system, including apps running on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Localhost\" target=\"_blank\" rel=\"noopener\">localhost<\/a> or custom ports. Just point it to the port like:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" style=\"font-size:18px\"><strong><em>nginx<\/em><\/strong><br><br>reverse_proxy localhost:3000<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3_How_do_I_enable_HTTP3_in_Caddy\"><\/span><strong>3. How do I enable HTTP\/3 in Caddy?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>HTTP\/3 is enabled by default in Caddy when using HTTPS. You don&#8217;t need to configure anything \u2014 just use a supported browser, and it works automatically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4_Does_Caddy_support_load_balancing\"><\/span><strong>4. Does Caddy support load balancing?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Yes. Caddy supports multiple load balancing policies like round-robin, random, and least connections. You can even configure health checks and failover for better uptime.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5_Is_Caddy_good_for_production_environments\"><\/span><strong>5. Is Caddy good for production environments?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Definitely. Caddy is production-ready and used by large-scale projects and businesses. Its performance is solid, and its security practices are up to modern standards.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here\u2019s a complete, beginner-friendly guide to setting up a powerful, secure, and modern reverse proxy using Caddy \u2014 the web server that does it all with <a class=\"read-more-link\" href=\"https:\/\/mainvps.net\/blog\/using-caddy-as-a-reverse-proxy\/\">Read More<\/a><\/p>\n","protected":false},"author":4,"featured_media":11484,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-11228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-hosting"],"_links":{"self":[{"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/posts\/11228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/comments?post=11228"}],"version-history":[{"count":6,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/posts\/11228\/revisions"}],"predecessor-version":[{"id":11278,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/posts\/11228\/revisions\/11278"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/media\/11484"}],"wp:attachment":[{"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/media?parent=11228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/categories?post=11228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mainvps.net\/blog\/wp-json\/wp\/v2\/tags?post=11228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}