<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.stradivart.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin</id>
	<title>Linux Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stradivart.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin"/>
	<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/wiki/Special:Contributions/Wikiadmin"/>
	<updated>2026-09-01T05:37:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=Main_Page&amp;diff=334</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=Main_Page&amp;diff=334"/>
		<updated>2026-08-17T14:12:14Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=333</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=333"/>
		<updated>2026-07-26T15:38:58Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
.tabel {&lt;br /&gt;
with:100% !important;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:33%;&lt;br /&gt;
display: block;&lt;br /&gt;
float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 1024px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=332</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=332"/>
		<updated>2026-07-26T15:36:14Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
.tabel {&lt;br /&gt;
with:100% !important;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:33%;&lt;br /&gt;
display: block;&lt;br /&gt;
float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=331</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=331"/>
		<updated>2026-07-26T15:34:48Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
.tabel {&lt;br /&gt;
with:100% !important;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:33%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=330</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=330"/>
		<updated>2026-07-26T15:31:08Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
.tabel {&lt;br /&gt;
with:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:33%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=Main_Page&amp;diff=329</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=Main_Page&amp;diff=329"/>
		<updated>2026-07-26T15:28:57Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabel3&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;celula3&amp;quot; |&lt;br /&gt;
Instalatorul avertizează că Pi-hole necesită o adresă IP statică pentru a funcționa corect. Deoarece aceasta a fost configurată ca prerechizită, se selectează Continue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;celula3&amp;quot; |&lt;br /&gt;
Instalatorul avertizează că Pi-hole necesită o adresă IP statică pentru a funcționa corect. Deoarece aceasta a fost configurată ca prerechizită, se selectează Continue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;celula3&amp;quot; |&lt;br /&gt;
[[File:Pi-hole install IP static.png|thumb|none|400px|Pi-hole install IP static]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=328</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=328"/>
		<updated>2026-07-26T15:28:02Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 75% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
    width: 33% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.tabel3 {&lt;br /&gt;
with:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:33%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
.celula3 {&lt;br /&gt;
width:100%;&lt;br /&gt;
display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=Main_Page&amp;diff=327</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=Main_Page&amp;diff=327"/>
		<updated>2026-07-26T15:27:16Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabel3&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;celula3&amp;quot; |&lt;br /&gt;
Instalatorul avertizează că Pi-hole necesită o adresă IP statică pentru a funcționa corect. Deoarece aceasta a fost configurată ca prerechizită, se selectează Continue.&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;celula3&amp;quot; |&lt;br /&gt;
[[File:Pi-hole install IP static.png|thumb|none|400px|Pi-hole install IP static]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;celula3&amp;quot; |&lt;br /&gt;
Instalatorul avertizează că Pi-hole necesită o adresă IP statică pentru a funcționa corect. Deoarece aceasta a fost configurată ca prerechizită, se selectează Continue.&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=326</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=326"/>
		<updated>2026-07-25T09:39:16Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Backend HTTP (ACME Challenge Forwarding) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy pentru a permite generarea certificatelor Let’s Encrypt în ISPConfig atunci când HAProxy funcționează în modul SSL Passthrough.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=325</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=325"/>
		<updated>2026-07-25T09:38:52Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HTTPS (port 443) cu SSL Passthrough */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy pentru a permite generarea certificatelor Let’s Encrypt în ISPConfig atunci când HAProxy funcționează în modul SSL Passthrough.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Backend HTTP (trafic normal)&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=324</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=324"/>
		<updated>2026-07-23T08:58:11Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 75% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
    width: 33% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=323</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=323"/>
		<updated>2026-07-23T08:57:34Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
    width: 33% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//.col2-responsive td {&lt;br /&gt;
//        display: block !important;&lt;br /&gt;
//        width: 100% !important;&lt;br /&gt;
//        padding-right: 0 !important;&lt;br /&gt;
//        box-sizing: border-box !important;&lt;br /&gt;
//    }&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=322</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=322"/>
		<updated>2026-07-23T08:52:29Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
    width: 33% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=321</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=321"/>
		<updated>2026-07-23T08:52:14Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=320</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=320"/>
		<updated>2026-07-23T08:51:38Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=319</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=319"/>
		<updated>2026-07-23T08:49:49Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33% !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=318</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=318"/>
		<updated>2026-07-23T08:48:36Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=317</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=317"/>
		<updated>2026-07-23T08:45:51Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
body { background: #ffeecc !important; }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=316</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=316"/>
		<updated>2026-07-23T08:45:16Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Replaced content with &amp;quot;/* CSS placed here will be applied to all skins */&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=315</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Vector.css&amp;diff=315"/>
		<updated>2026-07-23T08:39:10Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: Created page with &amp;quot;/* All CSS here will be loaded for users of the Vector skin */  .embedvideo iframe {     width: 100% !important;     height: auto !important;     aspect-ratio: 16 / 9;  table.responsive-three-cols td.col3 {     width: 33%;     background: #ffeecc !important;     }  @media screen and (max-width: 720px) {     .col2-responsive td {         display: block !important;         width: 100% !important;         padding-right: 0 !important;         box-sizing: border-box !importan...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=314</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=314"/>
		<updated>2026-07-23T08:01:08Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
//.col2-responsive td {&lt;br /&gt;
//    width: 50%;&lt;br /&gt;
//}&lt;br /&gt;
&lt;br /&gt;
//.embedvideo {&lt;br /&gt;
//    width: 100%;&lt;br /&gt;
//    margin: 0 auto; /* centrează pe desktop */&lt;br /&gt;
//}&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col3 {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col3 {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//.embedvideo iframe {&lt;br /&gt;
//    width: 100% !important;&lt;br /&gt;
//    height: auto !important;&lt;br /&gt;
//    aspect-ratio: 16 / 9;&lt;br /&gt;
//}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=313</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=313"/>
		<updated>2026-07-23T08:00:26Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col3&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col3&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col3&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=312</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=312"/>
		<updated>2026-07-23T07:31:42Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
    width: 50%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//.embedvideo {&lt;br /&gt;
//    width: 100%;&lt;br /&gt;
//    margin: 0 auto; /* centrează pe desktop */&lt;br /&gt;
//}&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
    background: #ffeecc !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//.embedvideo iframe {&lt;br /&gt;
//    width: 100% !important;&lt;br /&gt;
//    height: auto !important;&lt;br /&gt;
//    aspect-ratio: 16 / 9;&lt;br /&gt;
//}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=311</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=311"/>
		<updated>2026-07-23T07:26:53Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
    width: 50%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//.embedvideo {&lt;br /&gt;
//    width: 100%;&lt;br /&gt;
//    margin: 0 auto; /* centrează pe desktop */&lt;br /&gt;
//}&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
/* Desktop: 3 coloane */&lt;br /&gt;
table.responsive-three-cols td.col {&lt;br /&gt;
    width: 33%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
    table.responsive-three-cols td.col {&lt;br /&gt;
        display: block;&lt;br /&gt;
        width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//.embedvideo iframe {&lt;br /&gt;
//    width: 100% !important;&lt;br /&gt;
//    height: auto !important;&lt;br /&gt;
//    aspect-ratio: 16 / 9;&lt;br /&gt;
//}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=310</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=310"/>
		<updated>2026-07-23T07:25:49Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=309</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=309"/>
		<updated>2026-07-23T07:10:12Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=308</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=308"/>
		<updated>2026-07-19T07:58:09Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Frontend HTTP (port 80) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|connent=Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=307</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=307"/>
		<updated>2026-07-18T12:37:04Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|connent=Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=306</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=306"/>
		<updated>2026-07-18T12:36:02Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|150px|center|link=Haproxy-conf.yaml|connent=Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=305</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=305"/>
		<updated>2026-07-18T12:34:00Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|150px|center|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=304</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=304"/>
		<updated>2026-07-18T12:33:43Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|150px|center|link=Haproxy-conf.yamll|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=303</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=303"/>
		<updated>2026-07-18T12:32:39Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yamll|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=302</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=302"/>
		<updated>2026-07-18T12:30:48Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yamll|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=301</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=301"/>
		<updated>2026-07-18T12:30:25Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|75px|right|link=Haproxy-conf.yamll|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=300</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=300"/>
		<updated>2026-07-18T12:30:01Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yamll|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=299</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=299"/>
		<updated>2026-07-18T12:29:02Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|75px|center|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=298</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=298"/>
		<updated>2026-07-18T12:27:32Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|32px|center|link=Haproxy-conf.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=297</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=297"/>
		<updated>2026-07-18T12:26:45Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yamll|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:Filethumb.png&amp;diff=296</id>
		<title>File:Filethumb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:Filethumb.png&amp;diff=296"/>
		<updated>2026-07-18T12:26:17Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=295</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=295"/>
		<updated>2026-07-18T12:19:02Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|32px|link=Media:Haproxy.yaml]] [[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Yaml-icon.png|thumb|right|link=Haproxy-conf.yamll|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=294</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=294"/>
		<updated>2026-07-18T12:15:40Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=293</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=293"/>
		<updated>2026-07-18T12:13:15Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible plazbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=292</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=292"/>
		<updated>2026-07-18T12:07:24Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Accesare pagina de statistici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible plazbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:Haproxy-conf.yaml&amp;diff=291</id>
		<title>File:Haproxy-conf.yaml</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:Haproxy-conf.yaml&amp;diff=291"/>
		<updated>2026-07-18T12:01:40Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:Haproxy.yaml&amp;diff=290</id>
		<title>File:Haproxy.yaml</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:Haproxy.yaml&amp;diff=290"/>
		<updated>2026-07-18T12:01:33Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:Inventory.ini&amp;diff=289</id>
		<title>File:Inventory.ini</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:Inventory.ini&amp;diff=289"/>
		<updated>2026-07-18T12:00:43Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=288</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=MediaWiki:Common.css&amp;diff=288"/>
		<updated>2026-07-18T10:51:58Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
.col2-responsive td {&lt;br /&gt;
    width: 50%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//.embedvideo {&lt;br /&gt;
//    width: 100%;&lt;br /&gt;
//    margin: 0 auto; /* centrează pe desktop */&lt;br /&gt;
//}&lt;br /&gt;
&lt;br /&gt;
.embedvideo iframe {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    aspect-ratio: 16 / 9;&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    .col2-responsive td {&lt;br /&gt;
        display: block !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        padding-right: 0 !important;&lt;br /&gt;
        box-sizing: border-box !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//.embedvideo iframe {&lt;br /&gt;
//    width: 100% !important;&lt;br /&gt;
//    height: auto !important;&lt;br /&gt;
//    aspect-ratio: 16 / 9;&lt;br /&gt;
//}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=287</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=287"/>
		<updated>2026-07-16T11:26:47Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
FILE&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=286</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=286"/>
		<updated>2026-07-16T11:26:10Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
=== Ansible playbook ===&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FILE&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; vertical-align:middle; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
FILE&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=285</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=285"/>
		<updated>2026-07-16T11:17:15Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Pagina de statistici HAProxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy pe Ubuntu 2X.04 LTS ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
=== Ansible playbook ===&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
</feed>