{"id":2649,"date":"2020-04-07T17:06:50","date_gmt":"2020-04-07T15:06:50","guid":{"rendered":"https:\/\/geko2.factoryfy.com\/haproxy-health-checks-and-target-downtime-handling\/"},"modified":"2021-11-03T17:49:50","modified_gmt":"2021-11-03T16:49:50","slug":"haproxy-health-checks-downtime-handling","status":"publish","type":"post","link":"https:\/\/geko.cloud\/en\/haproxy-health-checks-downtime-handling\/","title":{"rendered":"HAProxy health checks and target downtime handling"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">When you are load balancing a service it is important to make sure that servers that are receiving the traffic are in good condition to respond. In this article we will address this topic with a couple of mechanisms that HAProxy provides.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">HTTP health checks<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">In order to enable health checks for each server, at least the <\/span><i><span style=\"font-weight: 400;\">check<\/span><\/i><span style=\"font-weight: 400;\"> keyword must be placed in the <\/span><i><span style=\"font-weight: 400;\">server<\/span><\/i><span style=\"font-weight: 400;\"> or <\/span><i><span style=\"font-weight: 400;\">default-server<\/span><\/i><span style=\"font-weight: 400;\"> lines.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">But let\u2019s talk about HAProxy default behavior. These checks will use the server\u2019s IP and TCP port to perform the health check. The interval between two consecutive health checks will be two seconds and its maximum timeout will be the same value, so if there is no response in that time it will be considered an invalid check. It will consider a server as UP after performing two consecutive valid health checks and it will consider a server as DOWN after performing three consecutive invalid health checks. It will only read the first 16384 bytes of the response. All these parameters can be changed in your configuration.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1652 size-full\" src=\"https:\/\/geko2.factoryfy.com\/wp-content\/uploads\/haproxy_server_state_checks.png\" alt=\"haproxy server state checks\" width=\"500\" height=\"308\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Now, the interesting thing about HAProxy is that it can perform layer 7 health checks, which are a more accurate method when forwarding traffic to http servers. To enable the http check, just use the <\/span><i><span style=\"font-weight: 400;\">option httpchk<\/span><\/i><span style=\"font-weight: 400;\"> directive within the backend block.<\/span><\/p>\n<div class=\"wp-block-codemirror-blocks code-block\">\n<pre class=\"CodeMirror\" data-setting=\"{\">backend http_test\r\n\u00a0mode http\r\n\u00a0balance roundrobin\r\n\u00a0option httpchk\r\n\u00a0http-check expect status 200\r\n\r\n\u00a0server Server1 192.168.10.11:80 check\r\n\u00a0server Server2 192.168.10.12:80 check<\/pre>\n<\/div>\n<p><span style=\"font-weight: 400;\">You can customize this check a little further, like this.<\/span><\/p>\n<div class=\"wp-block-codemirror-blocks code-block\">\n<pre class=\"CodeMirror\" data-setting=\"{\">\u00a0option httpchk HEAD \/ HTTP\/1.1rnHost: www.test.netrnUser-Agent: haproxy_check\r\n\u00a0http-check expect status 200<\/pre>\n<\/div>\n<p><span style=\"font-weight: 400;\">Here we are specifying to use the HEAD HTTP method to save us the HTTP body response, followed by the HTTP protocol and finally the HTTP header, that is a concatenated string in which every parameter is separated by \u2018rn\u2019 and every key\/value by a backslash and a space. In this particular header we have set the host, which is needed to check a virtual host in the target web server, and also the user agent to be able to identify those requests in the logs easily.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By using the <\/span><i><span style=\"font-weight: 400;\">http-check expect<\/span><\/i><span style=\"font-weight: 400;\"> directive we set a match rule to look for a valid response. Here we used the <\/span><i><span style=\"font-weight: 400;\">status<\/span><\/i><span style=\"font-weight: 400;\"> keyword to only mark as valid http responses whose code is 200. We could also look for a string by using the <\/span><i><span style=\"font-weight: 400;\">string<\/span><\/i><span style=\"font-weight: 400;\"> keyword, although this requires us to use a GET or POST HTTP method instead of HEAD.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">There are quite a few options for tuning your configuration, but it\u2019s not this article&#8217;s aim to explain this check mechanism options in depth. You can get further detail in the <strong><a href=\"https:\/\/www.haproxy.com\/documentation\/aloha\/10-0\/traffic-management\/lb-layer7\/health-checks\/\">HAProxy documentation<\/a><\/strong>.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Slow start mode<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Slow start mode limits and meter the traffic forwarded to a server that is just back online, and this is done on a progressive basis. That is, the server gets an uprising traffic amount as time goes by within a configured time window, it starts by receiving a 0% of the traffic and incrementing until 100% at the end. This allows you to add new servers without overwhelming them with a flood of requests.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Slow start is very useful for applications that depend on cache and need a warm-up period before being able to respond to requests with optimal performance, or applications that have a startup delay because they may need to load modules or even compile some elements to initialize (hello ASP .NET).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can set the <\/span><i><span style=\"font-weight: 400;\">slowstart<\/span><\/i><span style=\"font-weight: 400;\"> parameter at the server line within the <\/span><i><span style=\"font-weight: 400;\">backend<\/span><\/i><span style=\"font-weight: 400;\"> block or at the <\/span><i><span style=\"font-weight: 400;\">default-server<\/span><\/i><span style=\"font-weight: 400;\"> line, whether it is in the <\/span><i><span style=\"font-weight: 400;\">backend<\/span><\/i><span style=\"font-weight: 400;\"> or <\/span><i><span style=\"font-weight: 400;\">defaults<\/span><\/i><span style=\"font-weight: 400;\"> block. It could look like this.<\/span><\/p>\n<div class=\"wp-block-codemirror-blocks code-block\">\n<pre class=\"CodeMirror\" data-setting=\"{\">backend https_test\r\n mode http\r\n balance roundrobin\r\n option httpchk HEAD \/ HTTP\/1.1rnHost: www.test.netrnUser-Agent: haproxy_check\r\n http-check expect status 200\r\n default-server check ssl verify none slowstart 4m\r\n \r\n server Server1 192.168.10.11:443\r\n server Server2 192.168.10.12:443<\/pre>\n<\/div>\n<p><span style=\"font-weight: 400;\">It only accepts a value for time, which can use several time units: ms (default), s, m, h, etc.<br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It is important to take into consideration that this mode is not applied to servers when haproxy starts or has been reloaded after the configuration has been modified because a new server has been added. It only applies to servers which have been <b>previously marked as failed<\/b>.<\/span><\/p>\n<p>And well, I hope this will do for any basic doubts you could have about haproxy health checks.<\/p>\n<hr \/>\n<p>I hope you&#8217;ve enjoyed this post and I encourage you to <a href=\"https:\/\/geko.cloud\/en\/blog\/\">check our blog for other posts<\/a> that you might find helpful. <a href=\"https:\/\/geko.cloud\/en\/contact\/\">Do not hesitate to contact us<\/a> if you would like us to help you on your projects.<\/p>\n<p>See you on the next post!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When you are load balancing a service it is important to make sure that servers that are receiving the traffic are in good condition to respond. In this article we will address this topic with a couple of mechanisms that HAProxy provides. HTTP health checks In order to enable health checks for each server, at [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":2310,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[67],"tags":[80],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>HAProxy health checks<\/title>\n<meta name=\"description\" content=\"C\u00f3mo configurar los controles de salud de HAProxy y algunas otras consideraciones.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HAProxy health checks\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo configurar los controles de salud de HAProxy y algunas otras consideraciones.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\" \/>\n<meta property=\"og:site_name\" content=\"Geko Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-07T15:06:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-03T16:49:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Olmos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geko_cloud\" \/>\n<meta name=\"twitter:site\" content=\"@geko_cloud\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\"},\"author\":{\"name\":\"Antonio Olmos\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/06c5401df344025908fdda04850a1dd0\"},\"headline\":\"HAProxy health checks and target downtime handling\",\"datePublished\":\"2020-04-07T15:06:50+00:00\",\"dateModified\":\"2021-11-03T16:49:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\"},\"wordCount\":703,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/geko.cloud\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png\",\"keywords\":[\"HAproxy\"],\"articleSection\":[\"Labs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\",\"url\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\",\"name\":\"HAProxy health checks\",\"isPartOf\":{\"@id\":\"https:\/\/geko.cloud\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png\",\"datePublished\":\"2020-04-07T15:06:50+00:00\",\"dateModified\":\"2021-11-03T16:49:50+00:00\",\"description\":\"C\u00f3mo configurar los controles de salud de HAProxy y algunas otras consideraciones.\",\"breadcrumb\":{\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage\",\"url\":\"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png\",\"contentUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png\",\"width\":2000,\"height\":1000,\"caption\":\"HAProxy logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/geko.cloud\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HAProxy health checks and target downtime handling\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/geko.cloud\/es\/#website\",\"url\":\"https:\/\/geko.cloud\/es\/\",\"name\":\"Geko Cloud\",\"description\":\"Servicios de consultor\u00eda cloud y devops\",\"publisher\":{\"@id\":\"https:\/\/geko.cloud\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/geko.cloud\/es\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/geko.cloud\/es\/#organization\",\"name\":\"Geko Cloud\",\"url\":\"https:\/\/geko.cloud\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png\",\"contentUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png\",\"width\":1650,\"height\":809,\"caption\":\"Geko Cloud\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/geko_cloud\",\"https:\/\/www.instagram.com\/gekocloud\/\",\"https:\/\/www.linkedin.com\/company\/gekocloud\",\"https:\/\/www.youtube.com\/channel\/UC5EFLCqUM7fEaXSa_0nWowQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/06c5401df344025908fdda04850a1dd0\",\"name\":\"Antonio Olmos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g\",\"caption\":\"Antonio Olmos\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HAProxy health checks","description":"C\u00f3mo configurar los controles de salud de HAProxy y algunas otras consideraciones.","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:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/","og_locale":"en_US","og_type":"article","og_title":"HAProxy health checks","og_description":"C\u00f3mo configurar los controles de salud de HAProxy y algunas otras consideraciones.","og_url":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/","og_site_name":"Geko Cloud","article_published_time":"2020-04-07T15:06:50+00:00","article_modified_time":"2021-11-03T16:49:50+00:00","og_image":[{"width":2000,"height":1000,"url":"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png","type":"image\/png"}],"author":"Antonio Olmos","twitter_card":"summary_large_image","twitter_creator":"@geko_cloud","twitter_site":"@geko_cloud","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#article","isPartOf":{"@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/"},"author":{"name":"Antonio Olmos","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/06c5401df344025908fdda04850a1dd0"},"headline":"HAProxy health checks and target downtime handling","datePublished":"2020-04-07T15:06:50+00:00","dateModified":"2021-11-03T16:49:50+00:00","mainEntityOfPage":{"@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/"},"wordCount":703,"commentCount":0,"publisher":{"@id":"https:\/\/geko.cloud\/es\/#organization"},"image":{"@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage"},"thumbnailUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png","keywords":["HAproxy"],"articleSection":["Labs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/","url":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/","name":"HAProxy health checks","isPartOf":{"@id":"https:\/\/geko.cloud\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage"},"image":{"@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage"},"thumbnailUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png","datePublished":"2020-04-07T15:06:50+00:00","dateModified":"2021-11-03T16:49:50+00:00","description":"C\u00f3mo configurar los controles de salud de HAProxy y algunas otras consideraciones.","breadcrumb":{"@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#primaryimage","url":"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png","contentUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/haproxy_logo-2.png","width":2000,"height":1000,"caption":"HAProxy logo"},{"@type":"BreadcrumbList","@id":"https:\/\/geko.cloud\/es\/comprobaciones-de-estado-haproxy-y-control-del-downtime\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/geko.cloud\/en\/"},{"@type":"ListItem","position":2,"name":"HAProxy health checks and target downtime handling"}]},{"@type":"WebSite","@id":"https:\/\/geko.cloud\/es\/#website","url":"https:\/\/geko.cloud\/es\/","name":"Geko Cloud","description":"Servicios de consultor\u00eda cloud y devops","publisher":{"@id":"https:\/\/geko.cloud\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/geko.cloud\/es\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/geko.cloud\/es\/#organization","name":"Geko Cloud","url":"https:\/\/geko.cloud\/es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/","url":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png","contentUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png","width":1650,"height":809,"caption":"Geko Cloud"},"image":{"@id":"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/geko_cloud","https:\/\/www.instagram.com\/gekocloud\/","https:\/\/www.linkedin.com\/company\/gekocloud","https:\/\/www.youtube.com\/channel\/UC5EFLCqUM7fEaXSa_0nWowQ"]},{"@type":"Person","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/06c5401df344025908fdda04850a1dd0","name":"Antonio Olmos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g","caption":"Antonio Olmos"}}]}},"_links":{"self":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2649"}],"collection":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/comments?post=2649"}],"version-history":[{"count":2,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2649\/revisions"}],"predecessor-version":[{"id":5213,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2649\/revisions\/5213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/media\/2310"}],"wp:attachment":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/media?parent=2649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/categories?post=2649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/tags?post=2649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}