Hey All,
firstly i like to say that I am quite new to haproxying and would like to display what i have set up so you guys know what my infrastructure looks like.
My overall system looks like the following and is setup to function in 1Gbit full duplex (no jumbo frames within the network, MTU 1500 MSS 1460)
WAN -- PFSENSE (DNS Resolver and HAProxy) -- SWITCH __ Webserver 1 -- Many Services on different Ports \__Webserver 2 -- Many Services on differnt Ports \__ Pc and Wifi things
Or in Ip Related Terms
W.A.N.IP -- PFSENSE (192.168.0.1) -- SWITCH __ Webserver 1 (192.168.0.19) -- Many Services on different Ports
\__Webserver 2 (192.168.0.21) -- Many Services on differnt Ports
\__ PC (192.168.0.172)
On my Webserver 1 under port 2020 i have setup a html5 speedtest namely (GitHub - librespeed/speedtest: Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more) which works fairly nicely, i.e., if i visti 192.168.0.19:2020 i will be greeted with my speed test interface, and if i execute it i, i’ll get upload and download rates close to the maximum of 1Gbit, its in the lan so that great! When i visit my W.A.N.IP:2021 which is forwarded to 192.168.0.19:2020 the same applies.
However, now the HAproxy part comes in, I also have a domain with speedtest.example.wtf and a vailid ssl certificate which is offloaded with HAproxy so when I visit https://speedtest.example.wtf i’ll be greated with my speedtest interface. However when i execute the speedtest i’ll get download rates of close and constant to 500Mbit (webservers uploadspeed) and Upload rates of 1000Mbit (servers downloadspeed)
Now to my questions:
It is weird to me that my download rates are limited as soon as the HAproxy is in between, are there some stupid things i forgot to setup, does ssl offloading influence this at all?
My PFSENSE:
Intel(R) Core(TM) i5-5250U CPU @ 1.60GHz
Current: 1400 MHz, Max: 1601 MHz
4 Gig Ram
4 CPUs: 1 package(s) x 2 core(s) x 2 hardware threads
State table size 0.4% (1640/396000)
MBUF Usage 4% (10386/246072)
here my Ha.cfg
# Automaticaly generated, dont edit manually.
# Generated on: 2017-11-30 17:34
global
maxconn 10000
stats socket /tmp/haproxy.socket level admin
gid 80
nbproc 1
chroot /tmp/haproxy_chroot
daemon
tune.ssl.default-dh-param 2048
server-state-file /tmp/haproxy_server_state
tune.ssl.maxrecord 1370
ssl-default-bind-options no-sslv3 no-tls-tickets
ssl-default-bind-ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
listen HAProxyLocalStats
bind 127.0.0.1:2200 name localstats
mode http
stats enable
stats admin if TRUE
stats uri /haproxy/haproxy_stats.php?haproxystats=1
timeout client 5000
timeout connect 5000
timeout server 5000
frontend frontend1_http
bind 192.168.0.15:80 name 192.168.0.15:80
mode http
log global
option http-keep-alive
option forwardfor
acl https ssl_fc
http-request set-header X-Forwarded-Proto http if !https
http-request set-header X-Forwarded-Proto https if https
timeout client 30000
acl acl-https hdr_beg(host) -i chat
acl acl-https hdr_beg(host) -i ombi
acl acl-https hdr_beg(host) -i mb
acl acl-https hdr_beg(host) -i rss
acl acl-https hdr_beg(host) -i latex
acl acl-https hdr_beg(host) -i blog
acl acl-https hdr_beg(host) -i plex
acl acl-https hdr_beg(host) -i jd
acl acl-https hdr_beg(host) -i home
acl acl-https hdr_beg(host) -i fab
acl acl-https hdr_beg(host) -i pf
acl acl-https hdr_beg(host) -i hydra
http-request redirect scheme https if acl-https
frontend frontend2_sni
bind 192.168.0.15:443 name 192.168.0.15:443
mode tcp
log global
timeout client 30000
tcp-request inspect-delay 5s
acl cloud_sni req.ssl_sni -m beg -i cloud
tcp-request content accept if { req.ssl_hello_type 1 }
use_backend backend_cloud_https_ipvANY if cloud_sni
default_backend backend_offloading_https_ipvANY
frontend frontend3_offloading
bind 127.0.0.1:1443 name 127.0.0.1:1443 ssl crt /var/etc/haproxy/frontend3_offloading.pem
bind /tmp/haproxy_chroot/frontend3_offloading.socket name unixsocket uid 80 accept-proxy ssl crt /var/etc/haproxy/frontend3_offloading.pem
mode http
log global
option http-keep-alive
option forwardfor
acl https ssl_fc
http-request set-header X-Forwarded-Proto http if !https
http-request set-header X-Forwarded-Proto https if https
timeout client 30000
#
rspidel ^Server:.*$
rspidel ^X-Powered-By:.*$
rspidel ^X-AspNet-Version:.*$
http-response set-header Strict-Transport-Security max-age=31536000;\ includeSubdomains;\ preload
#http-response set-header X-Frame-Options SAMEDOMAIN
http-response set-header X-Content-Type-Options nosniff
acl chatACL hdr_beg(host) -i chat
acl ombiACL hdr_beg(host) -i ombi
acl latexACL hdr_beg(host) -i latex
acl rssACL hdr_beg(host) -i rss
acl mbACL hdr_beg(host) -i mb
acl embyACL hdr_beg(host) -i emby
acl plexACL hdr_beg(host) -i plex
acl jdACL hdr_beg(host) -i jd
acl homeACL hdr_beg(host) -i home
acl fabACL hdr_beg(host) -i fab
acl pfACL hdr_beg(host) -i pf
acl hydraACL hdr_beg(host) -i hydra
acl aclcrt_frontend3_offloading hdr_reg(host) -i ^([^\.]*)\.example\.de(:([0-9]){1,5})?$
acl aclcrt_frontend3_offloading hdr_reg(host) -i ^example\.de(:([0-9]){1,5})?$
use_backend backend-chat_http_ipv4 if chatACL aclcrt_frontend3_offloading
use_backend backend-ombi_http_ipv4 if ombiACL aclcrt_frontend3_offloading
use_backend backend-latex_http_ipv4 if latexACL aclcrt_frontend3_offloading
use_backend backend-rss_http_ipv4 if rssACL aclcrt_frontend3_offloading
use_backend backend-emby_http_ipv4 if embyACL aclcrt_frontend3_offloading
use_backend backend-plex_http_ipv4 if plexACL aclcrt_frontend3_offloading
use_backend backend-jd_http_ipv4 if jdACL aclcrt_frontend3_offloading
use_backend backend-emby_http_ipv4 if mbACL aclcrt_frontend3_offloading
use_backend backend-home_http_ipv4 if homeACL aclcrt_frontend3_offloading
use_backend backend-fabian-blog_http_ipv4 if fabACL aclcrt_frontend3_offloading
use_backend backend-pf_http_ipv4 if pfACL aclcrt_frontend3_offloading
use_backend backend-hydra_http_ipv4 if hydraACL aclcrt_frontend3_offloading
use_backend backend-kai-blog_http_ipv4 if aclcrt_frontend3_offloading
backend backend_cloud_https_ipvANY
mode tcp
log global
timeout connect 30000
timeout server 30000
retries 3
server cloud 192.168.0.21:2443 check-ssl verify none
backend backend_offloading_https_ipvANY
mode tcp
log global
timeout connect 30000
timeout server 30000
retries 3
server backend-to-frontend /frontend3_offloading.socket send-proxy-v2-ssl-cn check inter 1000
backend backend-chat_http_ipv4
mode http
log global
timeout connect 30000
timeout server 30000
retries 3
server chat 192.168.0.21:3000 check inter 1000
backend backend-ombi_http_ipv4
mode http
log global
timeout connect 30000
timeout server 30000
retries 3
server ombi 192.168.0.19:3579 check inter 1000
backend backend-latex_http_ipv4
mode http
log global
timeout connect 30000
timeout server 30000
retries 3
server latex 192.168.0.21:5000 check inter 1000
backend backend-rss_http_ipv4
mode http
log global
timeout connect 30000
timeout server 30000
retries 3
server rss 192.168.0.21:2280 check inter 1000
backend backend-emby_http_ipv4
mode http
log global
rspadd Strict-Transport-Security:\ max-age=31536000;
errorfile 503 /var/etc/haproxy/errorfile_backend-emby_http_ipv4_503_customerror
timeout connect 30000
timeout server 30000
retries 3
source ipv4@ usesrc clientip
# add some security related headers
# rspadd Content-Security-Policy:\ default-src\ https:\ data:\ 'unsafe-inline'\ 'unsafe-eval'
rspadd X-Frame-Options:\ SAMEORIGIN
rspadd X-Content-Type-Options:\ nosniff
rspadd X-Xss-Protection:\ 1;\ mode=block
server emby_warden 192.168.0.102:8096 check inter 1000
backend backend-plex_http_ipv4
mode http
log global
rspadd Strict-Transport-Security:\ max-age=31536000;
timeout connect 30000
timeout server 30000
retries 3
server emby_warden 192.168.0.102:8096 check inter 1000
server emby_wardenssl 192.168.0.102:8920 ssl check inter 1000 verify none
backend backend-jd_http_ipv4
mode http
log global
rspadd Strict-Transport-Security:\ max-age=31536000;
errorfile 503 /var/etc/haproxy/errorfile_backend-jd_http_ipv4_503_customerror
timeout connect 30000
timeout server 30000
retries 3
source ipv4@ usesrc clientip
server jd 192.168.0.19:2020 check inter 1000
backend backend-home_http_ipv4
mode http
log global
timeout connect 30000
timeout server 30000
retries 3
server homepi 192.168.0.191:8123 check inter 1000
backend backend-fabian-blog_http_ipv4
mode http
log global
rspadd Strict-Transport-Security:\ max-age=31536000;
timeout connect 30000
timeout server 30000
retries 3
server chat 192.168.0.21:2370 check inter 1000
backend backend-pf_http_ipv4
mode http
log global
timeout connect 30000
timeout server 30000
retries 3
server pf-rancherqnap 192.168.0.19:9001 check inter 1000
backend backend-hydra_http_ipv4
mode http
log global
rspadd Strict-Transport-Security:\ max-age=31536000;
timeout connect 30000
timeout server 30000
retries 3
server hydra 192.168.0.19:6050 check inter 1000
backend backend-kai-blog_http_ipv4
mode http
log global
rspadd Strict-Transport-Security:\ max-age=31536000;
timeout connect 30000
timeout server 30000
retries 3
server chat 192.168.0.21:2369 check inter 1000
Thanks Guys! Cheers