{"id":46561,"date":"2026-08-24T08:05:32","date_gmt":"2026-08-24T06:05:32","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=46561"},"modified":"2026-08-19T21:21:57","modified_gmt":"2026-08-19T19:21:57","slug":"nginx-secured-distribution-path-with-goldengate-rest-api","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/","title":{"rendered":"NGINX Secured Distribution Path with GoldenGate REST API"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In a <a href=\"https:\/\/www.dbi-services.com\/blog\/create-distribution-paths-in-nginx-secured-goldengate-26ai\/\" target=\"_blank\" rel=\"noopener noreferrer\">previous blog<\/a>, I presented how to set up a distribution path between two GoldenGate deployments both secured with NGINX. The method I used there was purely through the Web UI. But GoldenGate also exposes a full REST API, and everything you can do in the UI can be done through the API as well, which is useful for automation, scripting, or when the UI is not reachable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This blog covers the exact same setup, using the REST API instead. I will show two ways of doing it :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using <code>oggrestapi.py<\/code>, the <a href=\"https:\/\/www.dbi-services.com\/blog\/production-ready-goldengate-rest-client-in-python\/\" target=\"_blank\" rel=\"noopener noreferrer\">GoldenGate REST client<\/a> I released in another blog.<\/li>\n\n\n\n<li>Using the <code>requests<\/code> library to call the REST API directly.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"prerequisites\" class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The prerequisites are the same as in the previous blog :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Two GoldenGate Microservices deployments, <code>ogg_test_01<\/code> (source) on <code>oggvm1<\/code> and <code>ogg_test_02<\/code> (target) on <code>oggvm2<\/code>. I will use the latest 26ai version.<\/li>\n\n\n\n<li>Both OGG setups secured with NGINX acting as a reverse proxy, so everything goes through port <code>443<\/code>.<\/li>\n\n\n\n<li>A running extract on the source, writing to a trail (<code>aa<\/code> in my case).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Just like in the Web UI, there are three steps to get a working distribution path :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#create-the-path-connection\"><strong>Create a path connection<\/strong><\/a> on the source, to authenticate against the target.<\/li>\n\n\n\n<li><a href=\"#register-the-targets-ca-certificate\" data-type=\"internal\" data-id=\"#register-the-targets-ca-certificate\"><strong>Register the target\u2019s CA certificate<\/strong><\/a> on the source Service Manager.<\/li>\n\n\n\n<li><a href=\"#create-and-start-the-distribution-path\"><strong>Create and start the distribution path<\/strong><\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A quick note on URLs before we start. Behind an NGINX reverse proxy, each service has its own path prefix :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Administration Service : <code>\/services\/&lt;deployment&gt;\/adminsrvr\/v2\/...<\/code><\/li>\n\n\n\n<li>Distribution Service : <code>\/services\/&lt;deployment&gt;\/distsrvr\/v2\/...<\/code><\/li>\n\n\n\n<li>Service Manager : <code>\/services\/ServiceManager\/v2\/...<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>oggrestapi.py<\/code> client builds these for you as soon as you pass <code>reverse_proxy=True<\/code> and the deployment name, so let\u2019s connect once and reuse the client. If you don\u2019t provide the <code>password<\/code> argument, you will be prompted for it.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from oggrestapi import OGGRestAPI\n\nogg_source = OGGRestAPI(\n    url=\"https:\/\/oggvm1\",\n    username=\"ogg\",\n    deployment=\"ogg_test_01\",\n    reverse_proxy=True,\n)<\/code><\/pre>\n\n\n\n<h2 id=\"create-the-path-connection\" class=\"wp-block-heading\">Create the path connection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As explained in <a href=\"https:\/\/www.dbi-services.com\/blog\/creating-path-connections-with-goldengate-rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating Path Connections with GoldenGate REST API<\/a>, a <strong>path connection is simply an alias in the <code>Network<\/code> domain<\/strong>. It stores the credentials of a user that exists on the target deployment, and its alias is only known on the source side.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With the client, just call the <code>create_alias<\/code> method :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ogg_source.create_alias(\n    alias=\"ogg_target\",\n    domain=\"Network\",\n    data={\n        \"userid\": \"ogg_user_on_target\",\n        \"password\": \"***\",\n    },\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As mentioned in the introduction, here is the same call with <code>requests<\/code>, calling the Administration Service of <code>oggvm1<\/code> through NGINX :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import requests\n\nauth = (\"ogg\", \"ogg_password\")\n\nresponse = requests.post(\n    \"https:\/\/oggvm1\/services\/ogg_test_01\/adminsrvr\/v2\/credentials\/Network\/ogg_target\",\n    auth=auth,\n    json={\n        \"userid\": \"ogg_user_on_target\",\n        \"password\": \"***\",\n    },\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After refreshing the source Web UI, the new path connection is visible under the <em><strong>Path Connections<\/strong><\/em> tab :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png\" alt=\"GoldenGate Admin Service Path Connections tab showing the ogg_target alias with user ID ogg_user_on_target and type Password\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">But of course, you can also view the new path connection by calling the REST API:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Since path connections are aliases of the Network domain, we use the get_alias method to retrieve them\n&gt;&gt;&gt; ogg_source.get_alias('Network', 'ogg_target')\n{'$schema': 'ogg:credentials', 'userid': 'ogg_user_on_target', 'type': 'PASSWORD'}<\/code><\/pre>\n\n\n\n<h2 id=\"register-the-targets-ca-certificate\" class=\"wp-block-heading\">Register the target\u2019s CA certificate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because the <strong>deployments are secured with NGINX<\/strong>, the source has to trust the certificate authority that signed the target\u2019s certificate. This is done <strong>on the source Service Manager<\/strong>, by registering the target\u2019s <strong>root CA certificate<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With the client, use <code>create_deployment_certificate<\/code> against the source deployment. The certificate type to use is <code>truststore<\/code>, and the certificate content goes under <code>trustpointBundle.trustpointPem<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>target_ca = open(\"rootCA_ogg_test_02.pem\").read()\n\nogg_source.create_deployment_certificate(\n    deployment=\"ogg_test_01\",\n    type=\"truststore\",\n    certificate=\"rootCA_ogg_test_02\",\n    data={\n        \"trustpointBundle\": {\n            \"trustpointPem\": target_ca,\n        }\n    },\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The same call with <code>requests<\/code>, this time on the Service Manager prefix :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>target_ca = open(\"rootCA_ogg_test_02.pem\").read()\n\nresponse = requests.post(\n    \"https:\/\/oggvm1\/services\/ServiceManager\/v2\/deployments\/ogg_test_01\/certificates\/truststore\/rootCA_ogg_test_02\",\n    auth=auth,\n    json={\n        \"trustpointBundle\": {\n            \"trustpointPem\": target_ca,\n        }\n    },\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Registering under the specific deployment (<code>ogg_test_01<\/code>) is the equivalent of the <strong>Local<\/strong> option in the Web UI. To get the <strong>Shared<\/strong> behavior instead, register the same certificate under the <code>ServiceManager<\/code> deployment name, so it becomes available to every deployment on that node.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the certificate file contains a <strong>chain<\/strong> of certificates, you must register each certificate individually, since GoldenGate does not accept them in one go. I described that issue in detail in a <a href=\"https:\/\/www.dbi-services.com\/blog\/ogg-30007-how-to-register-certificates-in-goldengate\/\" target=\"_blank\" rel=\"noopener noreferrer\">blog about the <code>OGG-30007<\/code> error<\/a>.<\/p>\n\n\n\n<h2 id=\"create-and-start-the-distribution-path\" class=\"wp-block-heading\">Create and start the distribution path<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We can now create the distribution path itself. It has a <strong>source endpoint<\/strong> (the local trail) and a <strong>target endpoint<\/strong> (the target\u2019s Receiver Service, reached over <code>wss<\/code> through NGINX). Because the target is NGINX-secured, the target URI :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>uses the <code>wss<\/code> protocol on port <code>443<\/code>,<\/li>\n\n\n\n<li>points at the <strong>Receiver Service<\/strong> path prefix, <code>recvsrvr<\/code>, not <code>distsrvr<\/code> (that prefix is only for the Distribution Service on the source side),<\/li>\n\n\n\n<li>does <strong>not<\/strong> carry the path connection alias itself. The alias goes in a separate <code>authenticationMethod<\/code> key.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">With the client :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ogg_source.create_distribution_path(\n    distpath=\"path12\",\n    name=\"path12\",\n    source={\n        \"uri\": \"trail:\/\/localhost\/services\/v2\/sources?trail=PDB1\/aa\",\n    },\n    target={\n        \"uri\": \"wss:\/\/oggvm2\/services\/ogg_test_02\/recvsrvr\/v2\/targets?trail=PDB1\/bb\",\n        \"authenticationMethod\": {\n            \"domain\": \"Network\",\n            \"alias\": \"ogg_target\",\n        },\n    },\n    begin=\"now\",\n    status=\"running\",\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And the equivalent <code>requests<\/code> call, <strong>on the Distribution Service prefix<\/strong> (<code>\/services\/ogg_test_01\/distsrvr\/<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>response = requests.post(\n    \"https:\/\/oggvm1\/services\/ogg_test_01\/distsrvr\/v2\/sources\/path12\",\n    auth=auth,\n    json={\n        \"name\": \"path12\",\n        \"source\": {\n            \"uri\": \"trail:\/\/localhost\/services\/v2\/sources?trail=PDB1\/aa\",\n        },\n        \"target\": {\n            \"uri\": \"wss:\/\/oggvm2\/services\/ogg_test_02\/recvsrvr\/v2\/targets?trail=PDB1\/bb\",\n            \"authenticationMethod\": {\n                \"domain\": \"Network\",\n                \"alias\": \"ogg_target\",\n            },\n        },\n        \"begin\": \"now\",\n        \"status\": \"running\",\n    },\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The trail value in both URIs also has to match the path the extract actually registers, <code>EXTTRAIL PDB1\/aa<\/code> on the source becomes <code>trail=PDB1\/aa<\/code> in the source URI, and the same logic applies to the target\u2019s <code>bb<\/code> trail. A bare <code>trail=aa<\/code> without the PDB path segment matches neither what the extract writes nor what the target\u2019s own directory layout expects.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once the path is created with <code>status: \"running\"<\/code>, the trail files start flowing. You can confirm it on the target :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oracle@oggvm2:~\/ ll $OGG_DEPLOYMENT_HOME\/var\/lib\/data\/PDB1\ntotal 0\n-rw-r-----. 1 oracle oinstall 0 Mar 22 07:34 bb000000000<\/code><\/pre>\n\n\n\n<h2 id=\"the-remote-peer-submitted-a-certificate-that-failed-validation\" class=\"wp-block-heading\">The remote peer submitted a certificate that failed validation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If your distribution path doesn\u2019t start and generates a \u201c<em>certificate that failed validation<\/em>\u201d error, it means that you incorrectly registered your certificates. Make sure that the <strong>target<\/strong> deployment\u2019s CA certificate is registered on the <strong>source<\/strong> Service Manager, and not the other way around.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And that\u2019s it. With three REST calls, through <code>oggrestapi.py<\/code> or using the <code>requests<\/code> module, you get the exact same NGINX-secured distribution path as the Web UI method, but in a form you can script and repeat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a previous blog, I presented how to set up a distribution path between two GoldenGate deployments both secured with NGINX. The method I used there was purely through the Web UI. But GoldenGate also exposes a full REST API, and everything you can do in the UI can be done through the API as [&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":"","_members_access_role":[],"_members_access_error":""},"categories":[3787,59],"tags":[3827,3804,979,708,4194,328,2704,3730,1089,1521,3767,2564],"type_dbi":[],"class_list":["post-46561","post","type-post","status-publish","format-standard","hentry","category-goldengate","category-oracle","tag-3827","tag-26ai","tag-api","tag-automation","tag-distribution-path","tag-goldengate","tag-nginx","tag-ogg","tag-python","tag-rest","tag-restapi","tag-security-3"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.2 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>NGINX Secured Distribution Path with GoldenGate REST API - dbi Blog<\/title>\n<meta name=\"description\" content=\"Create an NGINX-secured GoldenGate distribution path through the REST API, using both the requests library and the oggrestapi.py Python client.\" \/>\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\/nginx-secured-distribution-path-with-goldengate-rest-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NGINX Secured Distribution Path with GoldenGate REST API\" \/>\n<meta property=\"og:description\" content=\"Create an NGINX-secured GoldenGate distribution path through the REST API, using both the requests library and the oggrestapi.py Python client.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-24T06:05:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png\" \/>\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=\"4 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\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/\"},\"author\":{\"name\":\"Julien Delattre\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"headline\":\"NGINX Secured Distribution Path with GoldenGate REST API\",\"datePublished\":\"2026-08-24T06:05:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/\"},\"wordCount\":793,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/preview.juliendelattre.pages.dev\\\/images\\\/blog\\\/goldengate-path-connections-rest-api.png\",\"keywords\":[\"26\",\"26ai\",\"api\",\"Automation\",\"distribution-path\",\"GoldenGate\",\"Nginx\",\"ogg\",\"Python\",\"rest\",\"restapi\",\"Security\"],\"articleSection\":[\"GoldenGate\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/\",\"name\":\"NGINX Secured Distribution Path with GoldenGate REST API - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/preview.juliendelattre.pages.dev\\\/images\\\/blog\\\/goldengate-path-connections-rest-api.png\",\"datePublished\":\"2026-08-24T06:05:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"description\":\"Create an NGINX-secured GoldenGate distribution path through the REST API, using both the requests library and the oggrestapi.py Python client.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/preview.juliendelattre.pages.dev\\\/images\\\/blog\\\/goldengate-path-connections-rest-api.png\",\"contentUrl\":\"https:\\\/\\\/preview.juliendelattre.pages.dev\\\/images\\\/blog\\\/goldengate-path-connections-rest-api.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nginx-secured-distribution-path-with-goldengate-rest-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NGINX Secured Distribution Path with GoldenGate REST API\"}]},{\"@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":"NGINX Secured Distribution Path with GoldenGate REST API - dbi Blog","description":"Create an NGINX-secured GoldenGate distribution path through the REST API, using both the requests library and the oggrestapi.py Python client.","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\/nginx-secured-distribution-path-with-goldengate-rest-api\/","og_locale":"en_US","og_type":"article","og_title":"NGINX Secured Distribution Path with GoldenGate REST API","og_description":"Create an NGINX-secured GoldenGate distribution path through the REST API, using both the requests library and the oggrestapi.py Python client.","og_url":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/","og_site_name":"dbi Blog","article_published_time":"2026-08-24T06:05:32+00:00","og_image":[{"url":"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png","type":"","width":"","height":""}],"author":"Julien Delattre","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Delattre","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/"},"author":{"name":"Julien Delattre","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"headline":"NGINX Secured Distribution Path with GoldenGate REST API","datePublished":"2026-08-24T06:05:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/"},"wordCount":793,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#primaryimage"},"thumbnailUrl":"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png","keywords":["26","26ai","api","Automation","distribution-path","GoldenGate","Nginx","ogg","Python","rest","restapi","Security"],"articleSection":["GoldenGate","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/","url":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/","name":"NGINX Secured Distribution Path with GoldenGate REST API - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#primaryimage"},"thumbnailUrl":"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png","datePublished":"2026-08-24T06:05:32+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"description":"Create an NGINX-secured GoldenGate distribution path through the REST API, using both the requests library and the oggrestapi.py Python client.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#primaryimage","url":"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png","contentUrl":"https:\/\/preview.juliendelattre.pages.dev\/images\/blog\/goldengate-path-connections-rest-api.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/nginx-secured-distribution-path-with-goldengate-rest-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"NGINX Secured Distribution Path with GoldenGate REST API"}]},{"@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\/46561","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=46561"}],"version-history":[{"count":3,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46561\/revisions"}],"predecessor-version":[{"id":46567,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46561\/revisions\/46567"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=46561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=46561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=46561"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=46561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}