{"id":13341,"date":"2025-12-20T11:30:41","date_gmt":"2025-12-20T06:00:41","guid":{"rendered":"https:\/\/www.youstable.com\/blog\/?p=13341"},"modified":"2025-12-20T11:30:55","modified_gmt":"2025-12-20T06:00:55","slug":"how-to-setup-haproxy-on-linux-server","status":"publish","type":"post","link":"https:\/\/www.youstable.com\/blog\/how-to-setup-haproxy-on-linux-server","title":{"rendered":"How to Setup HAProxy on Linux Server &#8211; Complete Guide"},"content":{"rendered":"\n<p><strong>To set up HAProxy on a Linux server<\/strong>, install the HAProxy package, enable and start the service, then configure a frontend to listen on ports 80\/443 and backends pointing to your app servers. Add health checks, SSL termination (optional), logging, and reload the service. Test failover, persistence, and security before going live.<\/p>\n\n\n\n<p>If you\u2019re learning how to setup HAProxy on Linux server, this guide covers installation, configuration, SSL, health checks, logging, tuning, and troubleshooting. With 12+ years managing high-traffic platforms, I\u2019ll walk you through a clean, production-ready path that\u2019s beginner-friendly, secure, and optimized for performance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"what-is-haproxy-and-why-use-it\"><strong>What is HAProxy and Why Use it?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"628\" src=\"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2025\/12\/Install-HAProxy-on-a-Linux-Server.jpg\" alt=\"What Is HAProxy and Why Use It?\" class=\"wp-image-13505\" srcset=\"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2025\/12\/Install-HAProxy-on-a-Linux-Server.jpg 1200w, https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2025\/12\/Install-HAProxy-on-a-Linux-Server-150x79.jpg 150w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>HAProxy (High Availability Proxy) is a fast, reliable open-source TCP\/HTTP <a href=\"https:\/\/www.youstable.com\/blog\/install-load-balancer-on-linux\/\">load balancer<\/a> and reverse proxy. It sits in front of application servers and efficiently distributes traffic, improves scalability, and increases uptime. It supports health checks, SSL termination, sticky sessions, ACL-based routing, HTTP\/2, and advanced observability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"prerequisites\"><strong>Prerequisites<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linux server (Ubuntu 22.04\/24.04, Debian 12, Rocky\/AlmaLinux 9, RHEL 9)<\/li>\n\n\n\n<li>Root or sudo access<\/li>\n\n\n\n<li>DNS A\/AAAA records pointing to the HAProxy server (e.g., example.com)<\/li>\n\n\n\n<li>Open firewall ports: 80 (HTTP), 443 (HTTPS), and SSH<\/li>\n\n\n\n<li>Two or more backend app servers (Nginx\/Apache\/Node\/etc.)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-by-step-how-to-setup-haproxy-on-linux-server\"><strong>Step-by-Step: How to Setup HAProxy on Linux Server<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"1-install-haproxy\"><strong>1) Install HAProxy<\/strong><\/h3>\n\n\n\n<p>Use your distribution\u2019s <a href=\"https:\/\/www.youstable.com\/blog\/what-is-yum-on-linux-server\/\">package manager<\/a>. These commands install the latest supported version from official repos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ubuntu \/ Debian\nsudo apt update\nsudo apt install -y haproxy\n\n# RHEL \/ Rocky \/ AlmaLinux (enable EPEL if needed)\nsudo dnf install -y haproxy\n\n# Verify version\nhaproxy -v<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"2-enable-and-start-the-service\"><strong>2) Enable and Start the Service<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable haproxy\nsudo systemctl start haproxy\nsudo systemctl status haproxy<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"3-open-firewall-ports\"><strong>3) Open Firewall Ports<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># UFW (Ubuntu)\nsudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw reload\n\n# firewalld (RHEL\/Rocky\/AlmaLinux)\nsudo firewall-cmd --permanent --add-service=http\nsudo firewall-cmd --permanent --add-service=https\nsudo firewall-cmd --reload<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"basic-haproxy-configuration-http\"><strong>Basic HAProxy Configuration (HTTP)<\/strong><\/h2>\n\n\n\n<p>Edit the main configuration at <code>\/etc\/haproxy\/haproxy.cfg<\/code>. The following minimal setup listens on port 80 and balances traffic to two backend <a href=\"https:\/\/www.youstable.com\/blog\/install-apache-web-server-in-linux\/\">web servers<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>global\n  log \/dev\/log local0\n  log \/dev\/log local1 notice\n  user haproxy\n  group haproxy\n  daemon\n  maxconn 5000\n\ndefaults\n  log     global\n  mode    http\n  option  httplog\n  option  dontlognull\n  timeout connect 5s\n  timeout client  30s\n  timeout server  30s\n  retries 3\n\nfrontend http-in\n  bind *:80\n  option http-server-close\n  # <a href=\"https:\/\/www.youstable.com\/blog\/redirect-http-to-https\/\">Redirect HTTP<\/a> to HTTPS later if you enable SSL\n  default_backend web-backend\n\nbackend web-backend\n  balance roundrobin\n  option httpchk GET \/healthz\n  http-check expect status 200\n  server web1 10.0.0.10:80 check\n  server web2 10.0.0.11:80 check<\/code><\/pre>\n\n\n\n<p>Make sure your app servers answer <code>\/healthz<\/code> with 200 OK. Change IPs to match your environment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"check-config-and-reload\"><strong>Check Config and Reload<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Validate syntax\nsudo haproxy -c -f \/etc\/haproxy\/haproxy.cfg\n\n# Reload without dropping connections\nsudo systemctl reload haproxy<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"enable-https-and-ssl-termination\"><strong>Enable HTTPS and SSL Termination<\/strong><\/h2>\n\n\n\n<p>Terminating TLS at HAProxy simplifies certificate management and can offload crypto from app servers. <a href=\"https:\/\/www.youstable.com\/blog\/what-is-lets-encrypt-on-linux-server\/\">Let\u2019s use Let\u2019s Encrypt<\/a> certificates and present HTTP\/2 to clients.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"1-obtain-lets-encrypt-certificates\"><strong>1) Obtain Let\u2019s Encrypt Certificates<\/strong><\/h3>\n\n\n\n<p>Stop HAProxy temporarily if you use the standalone challenge, or use DNS challenge to avoid downtime.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Install certbot\nsudo apt install -y certbot &amp;&amp; sudo systemctl stop haproxy\n# Or: sudo dnf install -y certbot\n\n# Issue a certificate (HTTP-01)\nsudo certbot certonly --standalone -d example.com -d www.example.com\n\n# Build a single PEM for HAProxy\nsudo mkdir -p \/etc\/haproxy\/certs\nsudo bash -c 'cat \/etc\/letsencrypt\/live\/example.com\/fullchain.pem \\\n\/etc\/letsencrypt\/live\/example.com\/privkey.pem &gt; \/etc\/haproxy\/certs\/example.com.pem'\nsudo chmod 600 \/etc\/haproxy\/certs\/example.com.pem\n\nsudo systemctl start haproxy<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"2-update-haproxy-for-https\"><strong>2) Update HAProxy for HTTPS<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>frontend http-in\n  bind *:80\n  <a href=\"https:\/\/www.youstable.com\/blog\/redirect-http-to-https-using-htaccess\/\">redirect scheme https<\/a> code 301 if !{ ssl_fc }\n  default_backend web-backend\n\nfrontend https-in\n  bind *:443 ssl crt \/etc\/haproxy\/certs\/example.com.pem alpn h2,http\/1.1\n  option http-server-close\n  http-response set-header Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"\n  default_backend web-backend<\/code><\/pre>\n\n\n\n<p>Reload and verify with SSL Labs. Automate renewal by recreating the PEM after each Certbot renewal using a post-hook.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Automate PEM concat after renewal\necho '#!\/bin\/sh\ncat \/etc\/letsencrypt\/live\/example.com\/fullchain.pem \\\n\/etc\/letsencrypt\/live\/example.com\/privkey.pem &gt; \/etc\/haproxy\/certs\/example.com.pem\nsystemctl reload haproxy' | sudo tee \/etc\/letsencrypt\/renewal-hooks\/post\/haproxy.sh\nsudo chmod +x \/etc\/letsencrypt\/renewal-hooks\/post\/haproxy.sh<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"load-balancing-methods-health-checks-and-stickiness\"><strong>Load-Balancing Methods, Health Checks, and Stickiness<\/strong><\/h2>\n\n\n\n<p>Choose a balancing algorithm based on traffic patterns, then confirm health checks work. Add stickiness if your app needs sessions pinned to a server.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Algorithms: <code>roundrobin<\/code> (default), <code>leastconn<\/code> (busy sites), <code>source<\/code> (client IP hash)<\/li>\n\n\n\n<li>HTTP health checks: <code>option httpchk GET \/healthz<\/code> with <code>http-check expect status 200<\/code><\/li>\n\n\n\n<li>Sticky sessions: insert cookies or use IP hash<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>backend web-backend\n  balance leastconn\n  cookie SRV insert indirect nocache\n  option httpchk GET \/healthz\n  http-check expect status 200\n  server web1 10.0.0.10:80 check cookie w1\n  server web2 10.0.0.11:80 check cookie w2<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"routing-with-acls-path-and-host-based\"><strong>Routing with ACLs (Path- and Host-Based)<\/strong><\/h2>\n\n\n\n<p>ACLs let you route traffic to different backends by path or hostname. Great for microservices or blue\/green deployments.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>backend api-backend\n  balance roundrobin\n  server api1 10.0.0.20:8080 check\n  server api2 10.0.0.21:8080 check\n\nbackend static-backend\n  balance roundrobin\n  server s1 10.0.0.30:80 check\n\nfrontend https-in\n  bind *:443 ssl crt \/etc\/haproxy\/certs\/example.com.pem alpn h2,http\/1.1\n  acl host_api hdr(host) -i api.example.com\n  acl is_static path_beg -i \/assets\/ \/static\/\n  use_backend api-backend if host_api\n  use_backend static-backend if is_static\n  default_backend web-backend<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"logging-and-observability\"><strong>Logging and Observability<\/strong><\/h2>\n\n\n\n<p>Enable detailed logs and a stats endpoint to monitor health and performance.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/rsyslog.d\/haproxy.conf\n$AddUnixListenSocket \/dev\/log\n$template Haproxy,\"%timegenerated% %HOSTNAME% haproxy: %msg%\\n\"\n:programname, startswith, \"haproxy\" -\/var\/log\/haproxy.log\n&amp; stop\n\n# Restart rsyslog\nsudo systemctl restart rsyslog<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Add to haproxy.cfg (global or defaults section)\nstats socket \/run\/haproxy\/admin.sock mode 660 level admin\nstats timeout 30s\n\n# Add a web stats page (optional)\nlisten stats\n  bind *:8404\n  stats enable\n  stats uri \/stats\n  stats refresh 10s\n  stats auth admin:StrongPass_here<\/code><\/pre>\n\n\n\n<p>Use <code>tail -f \/var\/log\/haproxy.log<\/code> and <code>echo \"show stat\" | socat stdio \/run\/haproxy\/admin.sock<\/code> for real-time insight.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"performance-tuning-and-security-hardening\"><strong>Performance Tuning and Security Hardening<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Capacity: Raise <code>maxconn<\/code> in <code>global<\/code> and tune OS limits (<code>nofile<\/code>, <code>somaxconn<\/code>).<\/li>\n\n\n\n<li>Keepalives: Use <code>option http-keep-alive<\/code> and sensible timeouts (30\u201360s client\/server).<\/li>\n\n\n\n<li>Transport: Enable HTTP\/2, strong ciphers, and HSTS on HTTPS frontends.<\/li>\n\n\n\n<li>Security: Restrict admin stats, run as non-root, and keep HAProxy updated.<\/li>\n\n\n\n<li>DDoS\/abuse: Rate-limit with stick-tables; block abusive IPs.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>global\n  maxconn 20000\n  tune.ssl.default-dh-param 2048\n\ndefaults\n  timeout connect 5s\n  timeout client  60s\n  timeout server  60s\n\n# Basic rate limiting example\nfrontend https-in\n  # ... existing bind\/ssl ...\n  stick-table type ip size 200k expire 30s store gpc0,http_req_rate(10s)\n  http-request track-sc0 src\n  acl too_many req_rate(sc0) gt 100\n  http-request deny if too_many<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"troubleshooting-common-errors\"><strong>Troubleshooting Common Errors<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Service won\u2019t start: Run <code>haproxy -c -f \/etc\/haproxy\/haproxy.cfg<\/code> to validate syntax and check <code>\/var\/log\/haproxy.log<\/code>.<\/li>\n\n\n\n<li>Port already in use: Another service binds to 80\/443. Stop it or change ports.<\/li>\n\n\n\n<li>503 Service Unavailable: All backends unhealthy. Verify health endpoint, firewall, and app status.<\/li>\n\n\n\n<li>SSL errors: Ensure PEM file order (fullchain first, then privkey) and permissions (<code>600<\/code>).<\/li>\n\n\n\n<li>SELinux (RHEL): Allow outbound connects if needed: <code>sudo setsebool -P haproxy_connect_any 1<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"high-availability-and-production-tips\"><strong>High Availability and Production Tips<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redundancy: Run two HAProxy nodes with VRRP (keepalived) for a floating virtual IP.<\/li>\n\n\n\n<li>Blue\/Green: Use ACLs to shift a small percentage of traffic to the new version, then increase gradually.<\/li>\n\n\n\n<li>Zero-downtime reloads: Always <code>systemctl reload haproxy<\/code> after config checks.<\/li>\n\n\n\n<li>Observability: Export logs to a SIEM; scrape stats into Prometheus\/Grafana.<\/li>\n\n\n\n<li>Backups: Keep version-controlled configs and secure certificate backups.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"complete-example-production-ready-haproxy-cfg\"><strong>Complete Example: Production-Ready haproxy.cfg<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>global\n  log \/dev\/log local0\n  log \/dev\/log local1 notice\n  user haproxy\n  group haproxy\n  daemon\n  maxconn 20000\n  tune.ssl.default-dh-param 2048\n  stats socket \/run\/haproxy\/admin.sock mode 660 level admin\n  stats timeout 30s\n\ndefaults\n  log     global\n  mode    http\n  option  httplog\n  option  dontlognull\n  option  http-keep-alive\n  timeout connect 5s\n  timeout client  60s\n  timeout server  60s\n  retries 3\n\nfrontend http-in\n  bind *:80\n  redirect scheme https code 301 if !{ ssl_fc }\n  default_backend web-backend\n\nfrontend https-in\n  bind *:443 ssl crt \/etc\/haproxy\/certs\/example.com.pem alpn h2,http\/1.1\n  http-response set-header Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"\n  stick-table type ip size 200k expire 30s store gpc0,http_req_rate(10s)\n  http-request track-sc0 src\n  acl too_many req_rate(sc0) gt 100\n  http-request deny if too_many\n  default_backend web-backend\n\nbackend web-backend\n  balance leastconn\n  option httpchk GET \/healthz\n  http-check expect status 200\n  cookie SRV insert indirect nocache\n  server web1 10.0.0.10:80 check cookie w1\n  server web2 10.0.0.11:80 check cookie w2\n\nlisten stats\n  bind *:8404\n  stats enable\n  stats uri \/stats\n  stats refresh 10s\n  stats auth admin:StrongPass_here<\/code><\/pre>\n\n\n\n<p>You now have a clear path to deploy, secure, and scale <a href=\"https:\/\/www.youstable.com\/blog\/configure-haproxy-on-linux\/\">HAProxy on Linux<\/a>. Follow the steps, validate each change, and consider managed infrastructure from YouStable if you prefer expert-backed reliability from day one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"faqs-haproxy-on-linux\"><strong>FAQs: HAProxy on Linux<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1765797813902\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"is-haproxy-a-reverse-proxy-or-load-balancer\"><strong>Is HAProxy a reverse proxy or load balancer?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Both. HAProxy acts as a reverse proxy, terminating client connections and forwarding to backend servers, and as a <a href=\"https:\/\/www.youstable.com\/blog\/configure-load-balancer-on-linux\/\">load balancer<\/a> distributing requests using algorithms like roundrobin or leastconn. It supports HTTP, TCP, and TLS features for modern application stacks.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765797823222\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"which-linux-distro-is-best-for-haproxy\"><strong>Which Linux distro is best for HAProxy?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Ubuntu LTS and Debian are popular for fast setup and frequent security updates. RHEL-based distros (Rocky\/AlmaLinux) offer enterprise stability. Choose what aligns with your team\u2019s package ecosystem and support requirements.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765797835572\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-enable-sticky-sessions-in-haproxy\"><strong>How do I enable sticky sessions in HAProxy?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Use cookie-based stickiness in the backend with <code>cookie SRV insert<\/code> and assign a <code>cookie<\/code> value to each server. Alternatively, use <code>balance source<\/code> to hash the client IP. Cookie-based is more reliable for multi-subnet users.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765797845404\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"can-haproxy-handle-ssl-for-multiple-domains\"><strong>Can HAProxy handle SSL for multiple domains?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. Place multiple PEM files in <code>\/etc\/haproxy\/certs<\/code> and use <code>crt-dir \/etc\/haproxy\/certs<\/code> on the bind line. HAProxy will present the correct certificate via SNI based on the requested hostname.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765797856988\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-make-haproxy-highly-available\"><strong>How do I make HAProxy highly available?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Deploy two HAProxy nodes and use keepalived (VRRP) to advertise a floating virtual IP. Both nodes share the same configuration; only the master answers. On failover, the VIP moves to the standby with minimal interruption.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>To set up HAProxy on a Linux server, install the HAProxy package, enable and start the service, then configure a [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":15565,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[350],"tags":[],"class_list":["post-13341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knowledgebase"],"acf":[],"featured_image_src":"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2025\/12\/How-to-Setup-HAProxy-on-Linux-Server.jpg","author_info":{"display_name":"Prahlad Prajapati","author_link":"https:\/\/www.youstable.com\/blog\/author\/prahladblog"},"_links":{"self":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/13341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/comments?post=13341"}],"version-history":[{"count":6,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/13341\/revisions"}],"predecessor-version":[{"id":15567,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/13341\/revisions\/15567"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media\/15565"}],"wp:attachment":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media?parent=13341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/categories?post=13341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/tags?post=13341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}