PHP code example of malc0mn / haproxy-config-builder
1. Go to this page and download the library: Download malc0mn/haproxy-config-builder library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
malc0mn / haproxy-config-builder example snippets
use HAProxy\Config\Comment;
use HAProxy\Config\Proxy\Backend;
use HAProxy\Config\Proxy\Frontend;
use HAProxy\Config\Proxy\Listen;
use HAProxy\Config\Userlist;
use HAProxy\Config\Config;
$comment = <<<TEXT
Simple configuration for an HTTP proxy listening on port 80 on all
interfaces and forwarding requests to a single backend "servers" with a
single server "server1" listening on 127.0.0.1:8000
TEXT;
$config = Config::create()
->addComment(
new Comment($comment)
)
->setDebug()
->setDaemon()
->addGlobal('maxconn', 256)
->addDefaults('mode', 'http')
->addDefaults('timeout', ['connect', '5000ms'])
->addDefaults('timeout', ['client', '50000ms'])
->addDefaults('timeout', ['server', '50000ms'])
->addUserlist(
Userlist::create('developers')
->addUser('eddy', '$6$mlskxjmqlkcnmlcjsmdl', ['editor', 'admin'])
->addGroup('editor', [])
)
->addFrontend(
Frontend::create('http-in')
->bind('*', 80)
->addParameter('default_backend', 'servers')
->addAcl('login_page', ['url_beg', '/login'])
)
->addBackend(
Backend::create('servers')
->addServer('server1', '127.0.0.1', 8000, ['maxconn', 32])
)
->addListen(
Listen::create('ssh')
->addServer('ssh-host', '*', 22, 'maxconn 3')
)
;
echo (string)$config;
use HAProxy\Config\Config;
$configFromFile = Config::fromFile('/etc/haproxy/haproxy.conf');
var_export($configFromFile);
use HAProxy\Config\Comment;
use HAProxy\Config\Proxy\Backend;
use HAProxy\Config\Proxy\Frontend;
use HAProxy\Config\Proxy\Listen;
use HAProxy\Config\Userlist;
use HAProxy\Config\Config;
$comment = <<<TEXT
Simple configuration for an HTTP proxy listening on port 80 on all
interfaces and forwarding requests to a single backend "servers" with a
single server "server1" listening on 127.0.0.1:8000
TEXT;
$config = Config::create()
->addComment(
new Comment($comment)
)
->setDebug()
->setDaemon()
->addGlobal('maxconn', 256)
->addDefaults('mode', 'http')
->addDefaults('timeout', ['connect', '5000ms'])
->addDefaults('timeout', ['client', '50000ms'])
->addDefaults('timeout', ['server', '50000ms'])
->addUserlist(
Userlist::create('developers')
->addUser('eddy', '$6$mlskxjmqlkcnmlcjsmdl', ['editor', 'admin'])
->addGroup('editor', [])
)
->addBackend(
Backend::create('servers')
->addServer('server1', '127.0.0.1', 8000, ['maxconn', 32])
->setPrintPriority(1002)
)
->addListen(
Listen::create('ssh')
->addServer('ssh-host', '*', 22, 'maxconn 3')
)
->addFrontend(
Frontend::create('http-in')
->bind('*', 80)
->addParameter('default_backend', 'servers')
->addAcl('login_page', ['url_beg', '/login'])
->setPrintPriority(1001)
)
;
echo (string)$config;
/*
# Simple configuration for an HTTP proxy listening on port 80 on all
# interfaces and forwarding requests to a single backend "servers" with a
# single server "server1" listening on 127.0.0.1:8000
global
maxconn 256
debug
daemon
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
userlist developers
group editor
user eddy password $6$mlskxjmqlkcnmlcjsmdl groups editor,admin
listen ssh
server ssh-host *:22 maxconn 3
frontend http-in
bind *:80
default_backend servers
acl login_page url_beg /login
backend servers
server server1 127.0.0.1:8000 maxconn 32
*/
use HAProxy\Config\Config;
$config = Config::fromFile('/etc/haproxy/haproxy.conf');
if ($config->frontendExists('www') && !$config->backendExists('www')) {
$config->removeFrontend('www');
}
if ($config->listenExists('ssh')) {
// Do stuff here.
}
$frontend = Frontend::create('www_frontend')
->bind('*', 8080)
->addParameter('mode', 'http')
->addParameter('http-request', 'set-header X-Original-Path %[path]')
->addAcl('is_host_website', 'hdr(host) -i website.example.com')
->addAcl('is_host_api', 'hdr(host) -i api.example.com')
->addAcl('is_path_admin', 'hdr_beg(X-Original-Path) -i /admin')
->addAcl('is_path_api', 'hdr_beg(X-Original-Path) -i /api')
// Here come the 'tagged' backends.
->addUseBackendWithConditions(
'website',
['is_host_website', 'is_path_admin'],
'if', // This is the condition, 'if' is the default.
'path_acl' // This is the tag.
)
->addUseBackendWithConditions(
'api',
['is_host_website', 'is_path_api'],
'if', // This is the condition, 'if' is the default.
'path_acl' // This is the tag.
)
// The 'regular' backends.
->addUseBackendWithConditions('website', ['is_host_website'])
->addUseBackendWithConditions('api', ['is_host_api'])
;
echo (string)$frontend;
/*
frontend www_frontend
bind *:8080
mode http
http-request set-header X-Original-Path %[path]
acl is_host_website hdr(host) -i website.example.com
acl is_host_api hdr(host) -i api.example.com
acl is_path_admin hdr_beg(X-Original-Path) -i /admin
acl is_path_api hdr_beg(X-Original-Path) -i /api
use_backend website if is_host_website is_path_admin
use_backend api if is_host_website is_path_api
use_backend website if is_host_website
use_backend api if is_host_api
*/
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.