Haproxy: различия между версиями

Материал из support.qbpro.ru
imported>Vix
(Новая страница: «* [http://haproxy.1wt.eu/ официальный сайт - en] * Описание конфигурационного файла HAProxy — haproxy.cfg * [ht…»)
 
 
(не показано 11 промежуточных версий 1 участника)
Строка 1: Строка 1:
==Установка:==
apt-get install haproxy
* Пример конфигурации сайтов как с '''https''' так и без, '''haproxy''' слушает как внешний канал так и внутренний '''VPN''':
global
        log /dev/log    local0
        log /dev/log    local1 notice
        user haproxy
        group haproxy
        daemon
        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private
        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
  ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
  ssl-default-bind-options no-sslv3
##
        maxconn 2048
defaults
        log    global
        option  redispatch
        option  tcp-smart-accept
        option  tcp-smart-connect
        retries 3
        maxconn 2000
        timeout connect 5000
        timeout check  3000
        timeout client  50000
        timeout server  50000
##
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http
       
##################################################
## balanser http & https examples config
##################################################
frontend http_frontend
        bind 92.19.132.73:80
        mode http
        option forwardfor
## -- for https web
        redirect scheme https if { hdr(Host) -i www.maindomain.ru } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i maindomain.ru } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i subdomain1.maindomain.ru } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i subdomain2.maindomain.ru } !{ ssl_fc }
#
## -- for http web
        acl host_subdomain3        hdr_beg(host) -i subdomain3.maindomain.ru
        acl host_subdomain4        hdr_beg(host) -i subdomain4.maindomain.ru
#
## -- for http rules web backens
        use_backend web_server1 if host_subdomain3
        use_backend web_server0 if host_subdomain4
#
## -- for http web backens
backend web_server0
        mode http
        reqadd X-Forwarded-Proto:\ http
        server subdomain3.maindomain.ru 10.5.1.7:8080 check
#
backend web_server1
        mode http
        reqadd X-Forwarded-Proto:\ http
        server subdomain4.maindomain.ru 10.5.1.11:80 check
#
## -- for https frontend
frontend https_frontend_ssl_pass
        bind 92.19.132.73:443
        mode tcp
        default_backend web_server_tcp
#
## -- for https web backens
backend web_server_tcp
        mode tcp
        balance roundrobin
        server maindomain.ru 10.5.1.7:443 send-proxy
        server subdomain1.maindomain.ru 10.5.1.7:443 send-proxy
        server subdomain2.maindomain.ru 10.5.1.7:443 send-proxy
#
## -- vpn fronted
frontend http_frontend_vpn
        bind 10.0.8.1:80
        mode http
        option forwardfor
#
## -- for http vpn web
        acl host_devhost      hdr_beg(host) -i devhost.ldomain.local
        acl host_libarh        hdr_beg(host) -i libarh.ldomain.local
#
## -- for http rules web backens
        use_backend web_server_vpn1 if host_devhost
        use_backend web_server_vpn0 if host_libarh
## -- for http vpn  web backens
backend web_server_vpn0
        mode http
        reqadd X-Forwarded-Proto:\ http
        server libarh.ldomain.local 10.5.1.7:80 check
backend web_server_vpn1
        mode http
        reqadd X-Forwarded-Proto:\ http
        server devhost.ldomain.local 10.5.1.9:80 check
* После изменений перезапуск haproxy...
* Пример конфигурации для сайтов с '''https''' для '''nginx''':
server {
    listen  10.5.1.7:8080;
    '''listen 10.5.1.7:443 ssl proxy_protocol;'''
    '''set_real_ip_from 92.19.132.73;'''
    '''real_ip_header proxy_protocol;'''
   
    include    /etc/nginx/ssl_maindomain_ru_conf;
    if ( $scheme = "http" ) {
          rewrite ^/(.*)$      https://$host/$1 permanent;
        }
    ssi on;
    server_name maindomain.ru;
    root /home/www/maindomain.ru;
    index index.php index.html index.htm;
    error_log /var/log/nginx/maindomain_ru_error.log;
    access_log /var/log/nginx/maindomain_ru_access.log;
   
    location ~* \.(css|js|png|gif|jpg)$ {
    expires max;
    }
    location = /50x.html {
    root /usr/share/nginx/html;
    }
    location / {
      try_files $uri $uri/ /index.php;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
   
    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include      fastcgi_params;
    }
   
    location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
    deny all;
    }
 
    location ~ ^/(bin|SQL)/ {
    deny all;
    }
   
      location ^~ /.well-known/acme-challenge/ {
        allow all;
        default_type "text/plain";
    }
}
==Пример перенапрвления с www.domain.com  на domain.com==
...
redirect prefix http://www.bar.com code 301 if { hdr(host) -i foo.com }
redirect prefix http://www.bar.com code 301 if { hdr(host) -i www.foo.com }
...
* [https://askdev.ru/q/kak-perenapravit-url-s-pomoschyu-haproxy-475161/ источник]
==Установка HTTPS через Haproxy==
*[https://skarlso.github.io/2017/02/15/how-to-https-with-hugo-letsencrypt-haproxy/ How to HTTPS with Hugo LetsEncrypt and HAProxy]
*[https://ezyforanykey.blogspot.com/2018/09/haproxy-letsencrypt.html HAProxy + LetsEncrypt балансировка на два веб-сервера. ]
*[https://github.com/msimerson/Mail-Toaster-6/wiki/How-to-for-Multiple-Domain-SSL-Certificates-with-HaProxy How to for Multiple Domain SSL Certificates with HaProxy]
*[https://www.8host.com/blog/zashhita-haproxy-pri-pomoshhi-lets-encrypt-na-servere-centos-7/ Защита HAProxy при помощи Let’s Encrypt на сервере CentOS 7]
== Тюнинг Haproxy ==
* [https://habr.com/ru/company/ostrovok/blog/438966/ История блужданий по документации Haproxy, или на что стоит обратить внимание при его конфигурации]
* [https://www.tech-notes.net/haproxy-configure-logs/ Как настроить лог для HaProxy]
* [https://habr.com/ru/companies/ostrovok/articles/438966/ История блужданий по документации Haproxy, или на что стоит обратить внимание при его конфигурации]
'''ИСТОЧНИКИ:'''
<hr>
* [http://haproxy.1wt.eu/ официальный сайт - en]
* [http://haproxy.1wt.eu/ официальный сайт - en]
* [[Описание конфигурационного файла HAProxy — haproxy.cfg]]
* [[Описание конфигурационного файла HAProxy — haproxy.cfg]]
Строка 7: Строка 200:
* [http://blog.mixu.net/2011/08/13/nginx-websockets-ssl-and-socket-io-deployment/ еще пример с node.js]
* [http://blog.mixu.net/2011/08/13/nginx-websockets-ssl-and-socket-io-deployment/ еще пример с node.js]
* [[HAProxy_Configuration_Manual |HAProxy Configuration Manual с частичным переводом]]
* [[HAProxy_Configuration_Manual |HAProxy Configuration Manual с частичным переводом]]
* [https://habr.com/ru/post/247297/ Получаем IP-адреса HTTPS-клиентов с HAProxy (frontend) на Nginx (backend) в режимах HTTP и TCP-балансировки]
* [http://devacademy.ru/posts/haproxy/ Введение в HAProxy и принципы распределения нагрузки]
* [https://www.linode.com/docs/uptime/loadbalancing/how-to-use-haproxy-for-load-balancing/#configure-load-balancing How to Use HAProxy for Load Balancing]
* [http://qaru.site/questions/94412/haproxy-redirecting-http-to-https-ssl HAProxy перенаправляет http на https (ssl)]
* [http://www.tech-notes.net/haproxy-configuration-examples/ Примеры настройки HaProxy]
* [https://habr.com/ru/sandbox/34354/ Описание конфигурационного файла HAProxy]
* [https://kamaok.org.ua/?p=1957 Установка и настройка HAProxy на Debian/Ubuntu]

Текущая версия от 22:11, 1 февраля 2024

Установка:

apt-get install haproxy
  • Пример конфигурации сайтов как с https так и без, haproxy слушает как внешний канал так и внутренний VPN:
global
        log /dev/log    local0
        log /dev/log    local1 notice
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
  ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
  ssl-default-bind-options no-sslv3
##
        maxconn 2048
defaults
        log     global
        option  redispatch
        option  tcp-smart-accept
        option  tcp-smart-connect
        retries 3
        maxconn 2000
        timeout connect 5000
        timeout check   3000
        timeout client  50000
        timeout server  50000
##
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http
        
##################################################
## balanser http & https examples config
##################################################
frontend http_frontend 
        bind 92.19.132.73:80
        mode http
        option forwardfor
## -- for https web
        redirect scheme https if { hdr(Host) -i www.maindomain.ru } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i maindomain.ru } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i subdomain1.maindomain.ru } !{ ssl_fc }
        redirect scheme https if { hdr(Host) -i subdomain2.maindomain.ru } !{ ssl_fc }
#
## -- for http web
        acl host_subdomain3        hdr_beg(host) -i subdomain3.maindomain.ru
        acl host_subdomain4        hdr_beg(host) -i subdomain4.maindomain.ru
#
## -- for http rules web backens
        use_backend web_server1 if host_subdomain3
        use_backend web_server0 if host_subdomain4
#
## -- for http web backens
backend web_server0
        mode http
        reqadd X-Forwarded-Proto:\ http
        server subdomain3.maindomain.ru 10.5.1.7:8080 check
#
backend web_server1
        mode http
        reqadd X-Forwarded-Proto:\ http
        server subdomain4.maindomain.ru 10.5.1.11:80 check
#
## -- for https frontend
frontend https_frontend_ssl_pass
        bind 92.19.132.73:443
        mode tcp
        default_backend web_server_tcp
#
## -- for https web backens
backend web_server_tcp
        mode tcp
        balance roundrobin
        server maindomain.ru 10.5.1.7:443 send-proxy
        server subdomain1.maindomain.ru 10.5.1.7:443 send-proxy
        server subdomain2.maindomain.ru 10.5.1.7:443 send-proxy
#
## -- vpn fronted
frontend http_frontend_vpn 
        bind 10.0.8.1:80
        mode http
        option forwardfor
#
## -- for http vpn web
        acl host_devhost       hdr_beg(host) -i devhost.ldomain.local
        acl host_libarh        hdr_beg(host) -i libarh.ldomain.local

#
## -- for http rules web backens
        use_backend web_server_vpn1 if host_devhost
        use_backend web_server_vpn0 if host_libarh

## -- for http vpn  web backens
backend web_server_vpn0
        mode http
        reqadd X-Forwarded-Proto:\ http
        server libarh.ldomain.local 10.5.1.7:80 check

backend web_server_vpn1
        mode http
        reqadd X-Forwarded-Proto:\ http
        server devhost.ldomain.local 10.5.1.9:80 check
  • После изменений перезапуск haproxy...
  • Пример конфигурации для сайтов с https для nginx:
server {
    listen  10.5.1.7:8080;
    listen 10.5.1.7:443 ssl proxy_protocol;
    set_real_ip_from 92.19.132.73;
    real_ip_header proxy_protocol;
    
    include     /etc/nginx/ssl_maindomain_ru_conf;

    if ( $scheme = "http" ) {
          rewrite ^/(.*)$       https://$host/$1 permanent;
        }
    ssi on;

    server_name maindomain.ru;
    root /home/www/maindomain.ru;
    index index.php index.html index.htm;

    error_log /var/log/nginx/maindomain_ru_error.log;
    access_log /var/log/nginx/maindomain_ru_access.log;
    
    location ~* \.(css|js|png|gif|jpg)$ {
    expires max;
    }

    location = /50x.html {
    root /usr/share/nginx/html;
    }

    location / {
     try_files $uri $uri/ /index.php;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    
    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
    
    location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
    deny all;
    }
  
    location ~ ^/(bin|SQL)/ {
    deny all;
    } 
    
      location ^~ /.well-known/acme-challenge/ {
        allow all;
        default_type "text/plain";
    }

}

Пример перенапрвления с www.domain.com на domain.com

...
redirect prefix http://www.bar.com code 301 if { hdr(host) -i foo.com }
redirect prefix http://www.bar.com code 301 if { hdr(host) -i www.foo.com }
...
* источник

Установка HTTPS через Haproxy

Тюнинг Haproxy

ИСТОЧНИКИ: