{"id":159,"date":"2026-05-15T18:20:01","date_gmt":"2026-05-15T16:20:01","guid":{"rendered":"https:\/\/gorankostic.com\/blog\/?p=159"},"modified":"2026-05-15T18:20:02","modified_gmt":"2026-05-15T16:20:02","slug":"caddy-reverse-proxy","status":"publish","type":"post","link":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/","title":{"rendered":"Caddy Reverse Proxy"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Caddy Reverse Proxy<\/h1>\n\n\n\n<p><strong>Excerpt:<\/strong> <br><a href=\"https:\/\/caddyserver.com?utm_source=chatgpt.com\">Caddy<\/a> reverse proxy omogu\u0107ava jednostavno rutiranje domena i subdomena ka internim servisima, uz automatski HTTPS, \u010distu konfiguraciju i veoma prakti\u010dan setup za moderne Docker i web stack sisteme.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caddy Reverse Proxy<\/h2>\n\n\n\n<p>Caddy reverse proxy je jedno od najprakti\u010dnijih re\u0161enja za moderne web sisteme zato \u0161to kombinuje jednostavnu konfiguraciju, automatski HTTPS i \u010dist na\u010din rutiranja saobra\u0107aja ka internim servisima.<\/p>\n\n\n\n<p>Za razliku od klasi\u010dnih proxy konfiguracija koje \u010desto zahtevaju vi\u0161e ru\u010dnog pode\u0161avanja SSL sertifikata, Caddy automatski preuzima veliki deo tog posla. Kada je domen pravilno usmeren na server, Caddy mo\u017ee sam da zatra\u017ei, instalira i obnavlja Let\u2019s Encrypt sertifikat.<\/p>\n\n\n\n<p>U Docker okru\u017eenjima Caddy je posebno koristan jer mo\u017ee da stoji kao centralna ulazna ta\u010dka za vi\u0161e servisa. Jedan container mo\u017ee primati sav saobra\u0107aj na portovima 80 i 443, a zatim prosle\u0111ivati request-e ka razli\u010ditim aplikacijama unutar Docker mre\u017ee.<\/p>\n\n\n\n<p>Tipi\u010dan primer je setup u kome <code>app.example.com<\/code> vodi ka Node aplikaciji, <code>n8n.example.com<\/code> ka automation servisu, a <code>api.example.com<\/code> ka Express API-ju. Spolja korisnik vidi uredne domene, dok se interna komunikacija odvija kroz service name i portove u Docker mre\u017ei.<\/p>\n\n\n\n<p>Caddyfile je velika prednost jer je \u010ditljiv i relativno kratak. Umesto kompleksnih blokova konfiguracije, \u010desto je dovoljno definisati domen i <code>reverse_proxy<\/code> pravilo ka internom servisu. To zna\u010dajno smanjuje gre\u0161ke i ubrzava odr\u017eavanje.<\/p>\n\n\n\n<p>Caddy je dobar i za webhook sisteme. Rute mogu biti precizno usmerene ka odre\u0111enom servisu, dok se ostatak saobra\u0107aja \u0161alje na drugi backend. To je korisno kada jedan domen mora da opslu\u017euje i frontend i posebne endpoint-e za automatizaciju.<\/p>\n\n\n\n<p>Security headers se tako\u0111e mogu centralizovati kroz Caddy. Umesto da svaka aplikacija posebno \u0161alje osnovne bezbednosne header-e, reverse proxy mo\u017ee dodati sloj za\u0161tite na nivou celog domena ili servisa.<\/p>\n\n\n\n<p>Kod produkcionih sistema va\u017eno je razumeti da Caddy ne zamenjuje pravilnu aplikacionu arhitekturu. Aplikacije i dalje moraju imati ispravne environment vrednosti, interne portove, restart politiku, logove i dobru Docker mre\u017enu organizaciju.<\/p>\n\n\n\n<p>Debugging Caddy setup-a obi\u010dno uklju\u010duje proveru DNS-a, SSL statusa, Caddy logova, Docker mre\u017ee, service name-a i internog porta aplikacije. Ako Caddy vra\u0107a gre\u0161ku, \u010desto problem nije u Caddy-ju, ve\u0107 u tome \u0161to backend servis nije dostupan ili ne slu\u0161a o\u010dekivani port.<\/p>\n\n\n\n<p>Dobar Caddy reverse proxy setup daje infrastrukturi \u010dist ulazni sloj. Kada su domeni, SSL, Docker mre\u017ee, rute, header-i i servisi pravilno povezani, Caddy postaje jednostavno i stabilno re\u0161enje za produkciono rutiranje modernih web aplikacija.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Caddy reverse proxy omogu\u0107ava jednostavno rutiranje domena i subdomena ka internim servisima, uz automatski HTTPS, \u010distu konfiguraciju i veoma prakti\u010dan setup za moderne Docker [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"class_list":["post-159","post","type-post","status-publish","format-standard","hentry","category-infrastructure","category-reverse-proxy-ssl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.5 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Caddy Reverse Proxy - Goran Kostic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Caddy Reverse Proxy\" \/>\n<meta property=\"og:description\" content=\"Caddy reverse proxy omogu\u0107ava jednostavno rutiranje domena i subdomena ka internim servisima, uz automatski HTTPS, \u010distu konfiguraciju i veoma prakti\u010dan setup za moderne Docker [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/\" \/>\n<meta property=\"og:site_name\" content=\"Goran Kostic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-15T16:20:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-15T16:20:02+00:00\" \/>\n<meta name=\"author\" content=\"WebixDesign\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"WebixDesign\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/\"},\"author\":{\"name\":\"WebixDesign\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0f800bfa90359ff9d2204020d58099c8\"},\"headline\":\"Caddy Reverse Proxy\",\"datePublished\":\"2026-05-15T16:20:01+00:00\",\"dateModified\":\"2026-05-15T16:20:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/\"},\"wordCount\":425,\"commentCount\":0,\"articleSection\":[\"INFRASTRUCTURE\",\"Reverse Proxy &amp; SSL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/\",\"url\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/\",\"name\":\"Caddy Reverse Proxy - Goran Kostic Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-05-15T16:20:01+00:00\",\"dateModified\":\"2026-05-15T16:20:02+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0f800bfa90359ff9d2204020d58099c8\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/caddy-reverse-proxy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Caddy Reverse Proxy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/\",\"name\":\"Goran Kostic Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0f800bfa90359ff9d2204020d58099c8\",\"name\":\"WebixDesign\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0b4c4d73af3b6d4c23d5191555e82cdc78a86604f69eae8d2c3d23e45d3967c5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0b4c4d73af3b6d4c23d5191555e82cdc78a86604f69eae8d2c3d23e45d3967c5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0b4c4d73af3b6d4c23d5191555e82cdc78a86604f69eae8d2c3d23e45d3967c5?s=96&d=mm&r=g\",\"caption\":\"WebixDesign\"},\"sameAs\":[\"https:\\\/\\\/gorankostic.com\\\/blog\"],\"url\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/author\\\/webixdesign\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Caddy Reverse Proxy - Goran Kostic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/","og_locale":"en_US","og_type":"article","og_title":"Caddy Reverse Proxy","og_description":"Caddy reverse proxy omogu\u0107ava jednostavno rutiranje domena i subdomena ka internim servisima, uz automatski HTTPS, \u010distu konfiguraciju i veoma prakti\u010dan setup za moderne Docker [&hellip;]","og_url":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/","og_site_name":"Goran Kostic Blog","article_published_time":"2026-05-15T16:20:01+00:00","article_modified_time":"2026-05-15T16:20:02+00:00","author":"WebixDesign","twitter_card":"summary_large_image","twitter_misc":{"Written by":"WebixDesign","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/#article","isPartOf":{"@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/"},"author":{"name":"WebixDesign","@id":"https:\/\/gorankostic.com\/blog\/#\/schema\/person\/0f800bfa90359ff9d2204020d58099c8"},"headline":"Caddy Reverse Proxy","datePublished":"2026-05-15T16:20:01+00:00","dateModified":"2026-05-15T16:20:02+00:00","mainEntityOfPage":{"@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/"},"wordCount":425,"commentCount":0,"articleSection":["INFRASTRUCTURE","Reverse Proxy &amp; SSL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/","url":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/","name":"Caddy Reverse Proxy - Goran Kostic Blog","isPartOf":{"@id":"https:\/\/gorankostic.com\/blog\/#website"},"datePublished":"2026-05-15T16:20:01+00:00","dateModified":"2026-05-15T16:20:02+00:00","author":{"@id":"https:\/\/gorankostic.com\/blog\/#\/schema\/person\/0f800bfa90359ff9d2204020d58099c8"},"breadcrumb":{"@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/caddy-reverse-proxy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gorankostic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Caddy Reverse Proxy"}]},{"@type":"WebSite","@id":"https:\/\/gorankostic.com\/blog\/#website","url":"https:\/\/gorankostic.com\/blog\/","name":"Goran Kostic Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gorankostic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/gorankostic.com\/blog\/#\/schema\/person\/0f800bfa90359ff9d2204020d58099c8","name":"WebixDesign","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0b4c4d73af3b6d4c23d5191555e82cdc78a86604f69eae8d2c3d23e45d3967c5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0b4c4d73af3b6d4c23d5191555e82cdc78a86604f69eae8d2c3d23e45d3967c5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0b4c4d73af3b6d4c23d5191555e82cdc78a86604f69eae8d2c3d23e45d3967c5?s=96&d=mm&r=g","caption":"WebixDesign"},"sameAs":["https:\/\/gorankostic.com\/blog"],"url":"https:\/\/gorankostic.com\/blog\/author\/webixdesign\/"}]}},"_links":{"self":[{"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/posts\/159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/comments?post=159"}],"version-history":[{"count":1,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":160,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/posts\/159\/revisions\/160"}],"wp:attachment":[{"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/media?parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/categories?post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/tags?post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}