{"id":147,"date":"2026-05-15T18:12:35","date_gmt":"2026-05-15T16:12:35","guid":{"rendered":"https:\/\/gorankostic.com\/blog\/?p=147"},"modified":"2026-05-15T18:12:35","modified_gmt":"2026-05-15T16:12:35","slug":"reverse-proxy-routing","status":"publish","type":"post","link":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/","title":{"rendered":"Reverse Proxy Routing"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Reverse Proxy Routing<\/h1>\n\n\n\n<p><strong>Odlomak: <\/strong><br>Reverse proxy routing omogu\u0107ava da vi\u0161e web aplikacija i servisa radi iza jednog servera, dok se domeni, subdomeni, SSL i spolja\u0161nji saobra\u0107aj kontroli\u0161u iz jedne centralne ta\u010dke.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reverse Proxy Routing<\/h2>\n\n\n\n<p>Reverse proxy routing je sistem u kome spolja\u0161nji request prvo dolazi do reverse proxy servera, a zatim se prosle\u0111uje odgovaraju\u0107em internom servisu. Umesto da svaka aplikacija direktno bude izlo\u017eena internetu, proxy preuzima ulogu ulazne ta\u010dke.<\/p>\n\n\n\n<p>Naj\u010de\u0161\u0107i alati za ovu namenu su Nginx, Caddy i Apache u reverse proxy konfiguraciji. U modernim Docker okru\u017eenjima posebno su prakti\u010dni Caddy i Nginx, jer mogu rutirati saobra\u0107aj ka container-ima, Node aplikacijama, API servisima, WordPress instancama ili internim alatima.<\/p>\n\n\n\n<p>Osnovna ideja je jednostavna: jedan domen ili subdomen vodi ka jednom servisu. Na primer, <code>app.example.com<\/code> mo\u017ee voditi ka Node aplikaciji, <code>api.example.com<\/code> ka API servisu, a <code>automation.example.com<\/code> ka n8n instanci. Korisnik vidi samo uredan URL, dok se interna struktura krije iza proxy sloja.<\/p>\n\n\n\n<p>SSL je jedan od najva\u017enijih razloga za kori\u0161\u0107enje reverse proxy-ja. Umesto da svaka aplikacija posebno re\u0161ava HTTPS, proxy mo\u017ee centralno upravljati sertifikatima, obnovom sertifikata, HTTPS redirect pravilima i sigurnosnim headerima.<\/p>\n\n\n\n<p>Kod Docker sistema reverse proxy \u010desto komunicira sa servisima kroz internu Docker mre\u017eu. To zna\u010di da aplikacije ne moraju imati javno otvorene portove. Dovoljno je da ih vidi proxy container, dok spolja ostaju dostupni samo portovi 80 i 443.<\/p>\n\n\n\n<p>Reverse proxy routing olak\u0161ava i odr\u017eavanje vi\u0161e aplikacija na istom serveru. Ako se doda novi servis, nije potrebno menjati celu server arhitekturu. Dovoljno je dodati novu proxy rutu, povezati servis na odgovaraju\u0107u mre\u017eu i usmeriti domen ili subdomen.<\/p>\n\n\n\n<p>Va\u017eno je pravilno proslediti header-e. Aplikacije \u010desto moraju znati originalni host, IP adresu korisnika, protokol i druge informacije. Header-i kao \u0161to su <code>Host<\/code>, <code>X-Forwarded-For<\/code> i <code>X-Forwarded-Proto<\/code> poma\u017eu aplikaciji da pravilno razume request.<\/p>\n\n\n\n<p>Kod aplikacija koje koriste WebSocket, webhook-e ili real-time komunikaciju, reverse proxy mora biti dodatno pode\u0161en. Ako upgrade header-i ili posebne rute nisu pravilno konfigurisani, aplikacija mo\u017ee delimi\u010dno raditi, ali odre\u0111ene funkcije ne\u0107e biti stabilne.<\/p>\n\n\n\n<p>Debugging reverse proxy problema zahteva proveru vi\u0161e slojeva: DNS, SSL, proxy konfiguraciju, Docker mre\u017eu, portove, aplikacione logove i firewall pravila. Gre\u0161ka 502, na primer, \u010desto zna\u010di da proxy radi, ali ne mo\u017ee da se pove\u017ee sa internim servisom.<\/p>\n\n\n\n<p>Dobar reverse proxy routing daje \u010dist, siguran i fleksibilan ulaz u infrastrukturu. Kada su domeni, SSL, header-i, mre\u017ee i servisi pravilno povezani, jedan server mo\u017ee pouzdano opslu\u017eivati vi\u0161e aplikacija bez haoti\u010dnog izlaganja portova i ru\u010dnih konfiguracija.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Reverse proxy routing omogu\u0107ava da vi\u0161e web aplikacija i servisa radi iza jednog servera, dok se domeni, subdomeni, SSL i spolja\u0161nji saobra\u0107aj kontroli\u0161u iz [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,6],"tags":[],"class_list":["post-147","post","type-post","status-publish","format-standard","hentry","category-docker-environments","category-infrastructure"],"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>Reverse Proxy Routing - 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\/reverse-proxy-routing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reverse Proxy Routing\" \/>\n<meta property=\"og:description\" content=\"Reverse proxy routing omogu\u0107ava da vi\u0161e web aplikacija i servisa radi iza jednog servera, dok se domeni, subdomeni, SSL i spolja\u0161nji saobra\u0107aj kontroli\u0161u iz [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/\" \/>\n<meta property=\"og:site_name\" content=\"Goran Kostic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-15T16:12:35+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\\\/reverse-proxy-routing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/\"},\"author\":{\"name\":\"WebixDesign\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0f800bfa90359ff9d2204020d58099c8\"},\"headline\":\"Reverse Proxy Routing\",\"datePublished\":\"2026-05-15T16:12:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/\"},\"wordCount\":439,\"commentCount\":0,\"articleSection\":[\"Docker Environments\",\"INFRASTRUCTURE\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/\",\"url\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/\",\"name\":\"Reverse Proxy Routing - Goran Kostic Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-05-15T16:12:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0f800bfa90359ff9d2204020d58099c8\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/2026\\\/05\\\/15\\\/reverse-proxy-routing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gorankostic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reverse Proxy Routing\"}]},{\"@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":"Reverse Proxy Routing - 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\/reverse-proxy-routing\/","og_locale":"en_US","og_type":"article","og_title":"Reverse Proxy Routing","og_description":"Reverse proxy routing omogu\u0107ava da vi\u0161e web aplikacija i servisa radi iza jednog servera, dok se domeni, subdomeni, SSL i spolja\u0161nji saobra\u0107aj kontroli\u0161u iz [&hellip;]","og_url":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/","og_site_name":"Goran Kostic Blog","article_published_time":"2026-05-15T16:12:35+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\/reverse-proxy-routing\/#article","isPartOf":{"@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/"},"author":{"name":"WebixDesign","@id":"https:\/\/gorankostic.com\/blog\/#\/schema\/person\/0f800bfa90359ff9d2204020d58099c8"},"headline":"Reverse Proxy Routing","datePublished":"2026-05-15T16:12:35+00:00","mainEntityOfPage":{"@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/"},"wordCount":439,"commentCount":0,"articleSection":["Docker Environments","INFRASTRUCTURE"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/","url":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/","name":"Reverse Proxy Routing - Goran Kostic Blog","isPartOf":{"@id":"https:\/\/gorankostic.com\/blog\/#website"},"datePublished":"2026-05-15T16:12:35+00:00","author":{"@id":"https:\/\/gorankostic.com\/blog\/#\/schema\/person\/0f800bfa90359ff9d2204020d58099c8"},"breadcrumb":{"@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gorankostic.com\/blog\/2026\/05\/15\/reverse-proxy-routing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gorankostic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Reverse Proxy Routing"}]},{"@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\/147","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=147"}],"version-history":[{"count":1,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/posts\/147\/revisions"}],"predecessor-version":[{"id":148,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/posts\/147\/revisions\/148"}],"wp:attachment":[{"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/media?parent=147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/categories?post=147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gorankostic.com\/blog\/wp-json\/wp\/v2\/tags?post=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}