We use it on many of our projects and it has always been a very reliable piece of software, even at high traffic.
Kudos Willy and team, congratulations on the release!
-b
What features/integrations make sense for a proxy with systemd? I'd assume it's only a unit that comes with the package, but that "-Ws" makes me wonder if there're deeper integrations.
In the future this could be extended to support systemd's socket passing and status messages. The latter allowing you to show a short string in `systemctl status haproxy`. See this example for php-fpm:
[root@example~]systemctl status php7.0-fpm.service
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled)
Active: active (running) since Sat 2017-11-25 13:28:22 CET; 1 day 8h ago
Docs: man:php-fpm7.0(8)
Main PID: 4624 (php-fpm7.0)
Status: "Processes active: 3, idle: 29, Requests: 1203613, slow: 545, Traffic: 10.1req/sec"
*snip*
See the mailing list thread for the full discussion of the feature: https://www.mail-archive.com/haproxy@formilux.org/msg27874.h...[1] https://www.freedesktop.org/software/systemd/man/sd_notify.h...
I reported it and was told it might not affect 1.8 since the systemd-wrapper is removed there, so gonna give this a try soon. See this thread: https://www.mail-archive.com/haproxy@formilux.org/msg27404.h...
(And I switched to only doing a reload notify in Ansible together with the hard-stop-after option in haproxy which is OK for me as well in 1.7)
Now I know what my week R&D time will be : HTTP2 in HAProxy !
Otherwise, outside of SSL, HAProxy has been very pleasant in my experience.
frontend example.com
bind 192.168.1.100:80
# Redirect ACME domain validations
acl url_acme_http01 path_beg /.well-known/acme-challenge/
http-request use-service lua.acme-http01 if METH_GET url_acme_http01
# Redirect all plain HTTP traffic to HTTPS
redirect scheme https code 301 if !{ ssl_fc } frontend http_in
bind *:80
bind *:443 ssl crt /path/to/letsencrypt/data/mydomain.pem
acl path_letsencrypt path_beg /.well-known/acme-challenge
use_backend letsencrypt if path_letsencrypt
backend letsencrypt
mode http
server server-letsencrypt MYLOCALIP:8080
For the letsencrypt docker image, I use mesosphere/letsencrypt-dcos with a patched run.sh that triggers a docker kill -s HUP on the haproxy container.If I, for example, configure my PHP VM to be reachable over "test.example.org" in Traefik, then Traefik will automatically try to issue a certificate for this domain once it detects the config change.
On HAProxy this is not as easy as I need to tell both LE and HAP about the new backend.
If it was integrated, I would only have to tell HAP.
It also lacks support for HTTP streaming for non-standard HTTP (I wish there was an option to just enable streaming on a host) which sucks for some enterprise software, and streaming for entire hosts so my nextcloud instance always has to wait for the traefik host to buffer the response before being able to download the file to the browser.
However, in terms of scaling and being able to get a SSL-terminating or SSL-handover reverse proxy going it's a breeze and it handles decent load very well.
What else would you use to notify interested people and be able to receive feedback at the same time?