Haproxy: различия между версиями
Материал из support.qbpro.ru
imported>Vix (Новая страница: «* [http://haproxy.1wt.eu/ официальный сайт - en] * Описание конфигурационного файла HAProxy — haproxy.cfg * [ht…») |
Vix (обсуждение | вклад) |
||
| (не показано 15 промежуточных версий 2 участников) | |||
| Строка 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] | |||
* [https://www.loadbalancer.org/blog/simple-denial-of-service-dos-attack-mitigation-using-haproxy-2/ Simple Denial of Service DOS attack mitigation using HAProxy] | |||
* [https://www.haproxy.com/blog/application-layer-ddos-attack-protection-with-haproxy Защита от DDoS-атак на уровне приложений с помощью HAProxy] | |||
== Тюнинг 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, или на что стоит обратить внимание при его конфигурации] | |||
* [https://bva.dyndns.info/wiki/service/haproxy haproxy - Карманный справочник] | |||
* [[Haproxy - настройка для FTP]] | |||
==ИСТОЧНИКИ== | |||
<hr> | |||
* [http://haproxy.1wt.eu/ официальный сайт - en] | * [http://haproxy.1wt.eu/ официальный сайт - en] | ||
* [[Описание конфигурационного файла HAProxy — haproxy.cfg]] | * [[Описание конфигурационного файла HAProxy — haproxy.cfg]] | ||
| Строка 7: | Строка 204: | ||
* [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] | |||
* [https://habr.com/ru/articles/244027/ Разбираем методы проксирования на основе HAProxy] | |||
Текущая версия от 11:55, 9 апреля 2025
Установка:
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
- How to HTTPS with Hugo LetsEncrypt and HAProxy
- HAProxy + LetsEncrypt балансировка на два веб-сервера.
- How to for Multiple Domain SSL Certificates with HaProxy
- Защита HAProxy при помощи Let’s Encrypt на сервере CentOS 7
- Simple Denial of Service DOS attack mitigation using HAProxy
- Защита от DDoS-атак на уровне приложений с помощью HAProxy
Тюнинг Haproxy
- История блужданий по документации Haproxy, или на что стоит обратить внимание при его конфигурации
- Как настроить лог для HaProxy
- История блужданий по документации Haproxy, или на что стоит обратить внимание при его конфигурации
- haproxy - Карманный справочник
- Haproxy - настройка для FTP
ИСТОЧНИКИ
- официальный сайт - en
- Описание конфигурационного файла HAProxy — haproxy.cfg
- haproxy+node.js
- Haproxy manual - en
- защита от взлома
- работаем с node
- еще пример с node.js
- HAProxy Configuration Manual с частичным переводом
- Получаем IP-адреса HTTPS-клиентов с HAProxy (frontend) на Nginx (backend) в режимах HTTP и TCP-балансировки
- Введение в HAProxy и принципы распределения нагрузки
- How to Use HAProxy for Load Balancing
- HAProxy перенаправляет http на https (ssl)
- Примеры настройки HaProxy
- Описание конфигурационного файла HAProxy
- Установка и настройка HAProxy на Debian/Ubuntu
- Разбираем методы проксирования на основе HAProxy
