{"id":44863,"date":"2026-06-09T08:47:40","date_gmt":"2026-06-09T06:47:40","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=44863"},"modified":"2026-06-09T08:47:49","modified_gmt":"2026-06-09T06:47:49","slug":"goldengate-nginx-reverse-proxy-behavior-changes","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/","title":{"rendered":"GoldenGate NGINX Reverse Proxy Behavior Changes"},"content":{"rendered":"\n<p>I recently wrote about <a href=\"https:\/\/www.dbi-services.com\/blog\/reconfigure-nginx-after-adding-a-goldengate-deployment\/\" target=\"_blank\" rel=\"noreferrer noopener\">NGINX reverse proxy reconfiguration<\/a> after <strong>creating or deleting a deployment<\/strong> in GoldenGate. It reminded me that there is an <strong>overlooked aspect<\/strong> of the reverse proxy configuration, which is important when trying to <strong>automate GoldenGate management<\/strong> with the REST API.<\/p>\n\n\n\n<p>In fact, when using a <strong>reverse proxy with a single deployment<\/strong>, some <strong>endpoints are different<\/strong> from a <strong>multi-deployment<\/strong> configuration.<\/p>\n\n\n\n<p>Let&#8217;s take the <a href=\"https:\/\/docs.oracle.com\/en\/database\/goldengate\/core\/26\/oggra\/op-services-version-extracts-get.html\" target=\"_blank\" rel=\"noreferrer noopener\">extract listing<\/a> endpoint as example: <code>GET \/services\/v2\/extracts<\/code>. With a <strong>basic GoldenGate configuration<\/strong> without NGINX reverse proxy, you could <strong>list the extracts<\/strong> with the following URL: <code>https:\/\/vmogg:7809\/services\/v2\/extracts<\/code><\/p>\n\n\n\n<p>In a <strong>single-deployment<\/strong> setting using NGINX, the <code>\/services\/v2\/extracts<\/code> endpoint is <strong>still valid<\/strong> and will list the extracts of your only deployment (API response given below).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"$schema\": \"api:standardResponse\",\n    \"links\": &#091;\n        {\n            \"rel\": \"canonical\",\n            \"href\": \"https:\/\/vmogg_single_deployment\/services\/v2\/extracts\",\n            \"mediaType\": \"text\/html\"\n        },\n        {\n            \"rel\": \"self\",\n            \"href\": \"https:\/\/vmogg_single_deployment\/services\/v2\/extracts\",\n            \"mediaType\": \"text\/html\"\n        },\n        {\n            \"rel\": \"describedby\",\n            \"href\": \"https:\/\/vmogg_single_deployment\/services\/ogg_test_01\/adminsrvr\/v2\/metadata-catalog\/extracts\",\n            \"mediaType\": \"application\/schema+json\"\n        }\n    ],\n    \"messages\": &#091;],\n    \"response\": {\n        \"$schema\": \"ogg:collection\",\n        \"items\": &#091;\n            {\n                \"links\": &#091;\n                    {\n                        \"rel\": \"parent\",\n                        \"href\": \"https:\/\/vmogg_single_deployment\/services\/v2\/extracts\",\n                        \"mediaType\": \"application\/json\"\n                    },\n                    {\n                        \"rel\": \"canonical\",\n                        \"href\": \"https:\/\/vmogg_single_deployment\/services\/v2\/extracts\/EXT1\",\n                        \"mediaType\": \"application\/json\"\n                    }\n                ],\n                \"$schema\": \"ogg:collectionItem\",\n                \"name\": \"EXT1\",\n                \"status\": \"running\"\n            }\n        ]\n    }\n}<\/code><\/pre>\n\n\n\n<p><br>In a <strong>multi-deployment<\/strong> configuration, the <strong>endpoint does not work<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\t\"links\": &#091;],\n\t\"messages\": &#091;\n\t\t{\n\t\t\t\"$schema\": \"ogg:message\",\n\t\t\t\"title\": \"The requested resource does not exist.\",\n\t\t\t\"code\": \"OGG-12031\",\n\t\t\t\"severity\": \"ERROR\",\n\t\t\t\"issued\": \"2026-05-28T18:25:48Z\",\n\t\t\t\"type\": \"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html#name-status-codes\"\n\t\t}\n\t]\n}<\/code><\/pre>\n\n\n\n<p>This is an behavior is <strong>expected<\/strong>, since you <strong>cannot query multiple deployments<\/strong> at once.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>With a <strong>single deployment<\/strong>, you can list extracts without specifying the deployment name.<\/li>\n\n\n\n<li>With <strong>multiple deployments<\/strong>, there is <strong>no meaning<\/strong> in listing extracts without having to specify which deployment you are targeting.<\/li>\n<\/ul>\n\n\n\n<p>In the NGINX reverse proxy configuration file, this is materialized by a change of behavior for all endpoints that are deployment-specific. To keep the extracts endpoint as example, here is what the configuration looks like in a <strong>single-deployment<\/strong> setup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location ~ ^\/services\/ogg_test_01\/(?&lt;version&gt;&#091;^\/]+)\/(?&lt;resource&gt;extracts.*)$ {\nlocation ~ ^\/services\/(?&lt;version&gt;&#091;^\/]+)\/(?&lt;resource&gt;extracts.*)$ {<\/code><\/pre>\n\n\n\n<p>And here is what it looks like in a <strong>multi-deployment<\/strong> setup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location ~ ^\/services\/ogg_test_01\/(?&lt;version&gt;&#091;^\/]+)\/(?&lt;resource&gt;extracts.*)$ {\nlocation ~ ^\/services\/ogg_test_02\/(?&lt;version&gt;&#091;^\/]+)\/(?&lt;resource&gt;extracts.*)$ {<\/code><\/pre>\n\n\n\n<p>With a single deployment, we could access the extracts endpoint through the deployment or with the default endpoint. With multiple deployments, this second option is not available anymore, and you have to specify the deployment name every time.<\/p>\n\n\n\n<p>This is why a best practice is to <strong>always use deployment-specific endpoints<\/strong> whenever it is possible, to avoid NGINX behavior changes in GoldenGate when adding or deleting deployments.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-can-i-still-use-deployment-specific-endpoints-if-i-don-t-have-a-reverse-proxy\">Can I still use deployment-specific endpoints if I don&#8217;t have a reverse proxy ?<\/h2>\n\n\n\n<p>In the same way that it does not make sense to have a single endpoint to list extracts if you have multiple deployments with a reverse proxy, it <strong>does not make sense to include the deployment<\/strong> name in the URL if you do not have a reverse proxy. If you try to access this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http(s):\/\/vmogg:port\/services\/deployment_name\/adminsrvr\/v2\/extracts<\/code><\/pre>\n\n\n\n<p>You will receive an error stating that &#8220;<em>The requested resource does not exist<\/em>&#8220;. <strong>Without a reverse proxy<\/strong>, the <strong>port<\/strong> is what <strong>determines both the deployment and the service<\/strong> to which you connect.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently wrote about NGINX reverse proxy reconfiguration after creating or deleting a deployment in GoldenGate. It reminded me that there is an overlooked aspect of the reverse proxy configuration, which is important when trying to automate GoldenGate management with the REST API. In fact, when using a reverse proxy with a single deployment, some [&hellip;]<\/p>\n","protected":false},"author":152,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3787,59],"tags":[3804,979,769,328,528,2704,3730,910,3767,4070],"type_dbi":[3823,3801,3818,3740,4074,3968,3881,4069,3769,4071],"class_list":["post-44863","post","type-post","status-publish","format-standard","hentry","category-goldengate","category-oracle","tag-26ai","tag-api","tag-deployment","tag-goldengate","tag-multiple","tag-nginx","tag-ogg","tag-proxy","tag-restapi","tag-reverse","type-26ai","type-api","type-deployment","type-goldengate","type-multiple","type-nginx","type-ogg","type-proxy","type-restapi","type-reverse"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.7 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>GoldenGate NGINX Reverse Proxy Behavior Changes - dbi Blog<\/title>\n<meta name=\"description\" content=\"Why you should always work with deployment-specific endpoints instead of generic ones, to avoid GoldenGate NGINX behavior changes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GoldenGate NGINX Reverse Proxy Behavior Changes\" \/>\n<meta property=\"og:description\" content=\"Why you should always work with deployment-specific endpoints instead of generic ones, to avoid GoldenGate NGINX behavior changes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-09T06:47:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-09T06:47:49+00:00\" \/>\n<meta name=\"author\" content=\"Julien Delattre\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Delattre\" \/>\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:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/\"},\"author\":{\"name\":\"Julien Delattre\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"headline\":\"GoldenGate NGINX Reverse Proxy Behavior Changes\",\"datePublished\":\"2026-06-09T06:47:40+00:00\",\"dateModified\":\"2026-06-09T06:47:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/\"},\"wordCount\":390,\"commentCount\":0,\"keywords\":[\"26ai\",\"api\",\"Deployment\",\"GoldenGate\",\"Multiple\",\"Nginx\",\"ogg\",\"Proxy\",\"restapi\",\"reverse\"],\"articleSection\":[\"GoldenGate\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/\",\"name\":\"GoldenGate NGINX Reverse Proxy Behavior Changes - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-06-09T06:47:40+00:00\",\"dateModified\":\"2026-06-09T06:47:49+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"description\":\"Why you should always work with deployment-specific endpoints instead of generic ones, to avoid GoldenGate NGINX behavior changes.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-nginx-reverse-proxy-behavior-changes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GoldenGate NGINX Reverse Proxy Behavior Changes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\",\"name\":\"Julien Delattre\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g\",\"caption\":\"Julien Delattre\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/juliendelattre\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GoldenGate NGINX Reverse Proxy Behavior Changes - dbi Blog","description":"Why you should always work with deployment-specific endpoints instead of generic ones, to avoid GoldenGate NGINX behavior changes.","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:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/","og_locale":"en_US","og_type":"article","og_title":"GoldenGate NGINX Reverse Proxy Behavior Changes","og_description":"Why you should always work with deployment-specific endpoints instead of generic ones, to avoid GoldenGate NGINX behavior changes.","og_url":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/","og_site_name":"dbi Blog","article_published_time":"2026-06-09T06:47:40+00:00","article_modified_time":"2026-06-09T06:47:49+00:00","author":"Julien Delattre","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Delattre","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/"},"author":{"name":"Julien Delattre","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"headline":"GoldenGate NGINX Reverse Proxy Behavior Changes","datePublished":"2026-06-09T06:47:40+00:00","dateModified":"2026-06-09T06:47:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/"},"wordCount":390,"commentCount":0,"keywords":["26ai","api","Deployment","GoldenGate","Multiple","Nginx","ogg","Proxy","restapi","reverse"],"articleSection":["GoldenGate","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/","url":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/","name":"GoldenGate NGINX Reverse Proxy Behavior Changes - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2026-06-09T06:47:40+00:00","dateModified":"2026-06-09T06:47:49+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"description":"Why you should always work with deployment-specific endpoints instead of generic ones, to avoid GoldenGate NGINX behavior changes.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-nginx-reverse-proxy-behavior-changes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GoldenGate NGINX Reverse Proxy Behavior Changes"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e","name":"Julien Delattre","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g","caption":"Julien Delattre"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/juliendelattre\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/44863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/152"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=44863"}],"version-history":[{"count":3,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/44863\/revisions"}],"predecessor-version":[{"id":44970,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/44863\/revisions\/44970"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=44863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=44863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=44863"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=44863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}