标签: haproxy

定义自定义负载平衡算法

情况如下:

我有许多Web服务器,比如10.我需要使用(软件)负载均衡器,它可以使用反向代理服务器实现,如HAProxy或Varnish.现在,我们所服务的所有流量都是通过https而不是http,所以Varnish是不可能的.

现在,我想将用户的请求分成几个类别,这些类别取决于请求的一个输入(POST)参数.根据该参数,我需要在服务器之间划分请求,基于此,(即使所有其他输入(POST)参数相同),不同的服务器将以不同的方式提供服务.

所以,我需要定义一个自定义负载平衡算法,这样,对于该参数的特定值,我将负载除以特定的3(比方说),对于某些其他值,将请求分为特定的2和其他值( s),剩下的5.

由于我不能使用清漆,因为它不能用于终止ssl(定义自定义算法在VCL中很容易),我正在考虑使用HA-Proxy.

所以,这是一个问题:

任何人都可以帮助我如何使用HA-Proxy定义自定义负载平衡功能?

我研究了很多,但我找不到任何这样的文件.因此,如果HA-Proxy不可能,您是否可以将我转介给其他一些反向代理服务,它也可以用作负载均衡器,以满足上述两个标准?(ssl终止和定义自定义负载平衡的能力).

编辑:

这个问题是我之前提出的一个问题.用于https的清漆

ssl https reverse-proxy load-balancing haproxy

9
推荐指数
1
解决办法
1261
查看次数

Haproxy 真实 IP + Cloudflare

我似乎无法完成这件事。我仍然在我的日志中看到 cloudflare IP。目前,我有一个负载均衡器,它位于 Cloudflare 后面。

目前,这是与 forwardfor 相关的块:

    option          forwardfor except 127.0.0.1
option          forwardfor except 204.93.240.0/24
option          forwardfor except 204.93.177.0/24
option          forwardfor except 199.27.128.0/21
option          forwardfor except 173.245.48.0/20
option          forwardfor except 103.22.200.0/22
option          forwardfor except 141.101.64.0/18
option          forwardfor except 108.162.192.0/18
    option          forwardfor header X-Real-IP
    reqadd          X-Forwarded-Proto:\ http
Run Code Online (Sandbox Code Playgroud)

有人知道从 Cloudflare 获取真实 IP 的正确配置吗?或者可能相当于 nginx 的 set_real_ip_from cloudflareIP 和/或 real_ip_header CF-Connecting-IP 到 haproxy?谢谢。

haproxy cloudflare

8
推荐指数
2
解决办法
8232
查看次数

如何使用HAProxy将domain.com重写到www.domain.com?

我们有1个负载均衡器,后面有3个成员:

主要平衡器:www.website.com成员:web1.website.com,web2.website.com和web3.website.com

目前我们在loadbalancer上使用nginx,但我们想用HAProxy替换它.

Nginx使用以下行将没有www(domain.com)的域重写到www.domain.com:

server {
    server_name domain.com;
    listen 1.2.3.4:80;

    rewrite ^(.*) http://www.domain.com$1 permanent;
}
Run Code Online (Sandbox Code Playgroud)

如何使用HAproxy进行管理?

我的haproxy配置:

frontend http 1.2.3.4:80

    default_backend www_cluster
    acl is_www hdr_end(host) -i www.domain.com
    use_backend www_cluster if is_www


backend www_cluster

    balance roundrobin
    cookie SERVERID insert nocache indirect

    option httpchk HEAD / HTTP/1.0
    option httpclose
    option forwardfor

    server web1 1.2.3.5:82 cookie WEB1 check
    server web2 1.2.3.6:82 cookie WEB2 check
    server web3 1.2.3.7:82 cookie WEB3 check
Run Code Online (Sandbox Code Playgroud)

TIA!

rewrite haproxy

8
推荐指数
2
解决办法
2万
查看次数

TCP负载平衡器和HTTP负载平衡器之间的区别以及何时使用什么?

我试图了解这两者之间的基本用例,以及何时优先使用另一种。

  1. 例如,HAProxy支持TCP负载平衡。在实际情况下,这将是决定因素吗?
  2. 还有什么HTTP LB可以实现TCP不能,反之亦然
  3. 任何参考架构

任何与实际用例相关的链接都很好

architecture load-balancing web-applications haproxy

8
推荐指数
1
解决办法
3489
查看次数

使用HAproxy将标头添加到特定URL的响应中

我的HAproxy配置中有一个简单的条件(我试过这个用于前端后端):

acl no_index_url path_end .pdf .doc .xls .docx .xlsx
rspadd X-Robots-Tag:\ noindex if no_index_url
Run Code Online (Sandbox Code Playgroud)

它应该将no-robots标头添加到不应编入索引的内容中.但是WARNING在解析配置时它给了我这个:

acl 'no_index_url' will never match because it only involves keywords
    that are incompatible with 'backend http-response header rule'
Run Code Online (Sandbox Code Playgroud)

acl 'no_index_url' will never match because it only involves keywords
    that are incompatible with 'frontend http-response header rule'
Run Code Online (Sandbox Code Playgroud)

根据文档,rspadd可以在前端后端使用.的path_end是在中实施例中使用的前端.为什么我会收到此错误,这是什么意思?

load-balancing haproxy

8
推荐指数
1
解决办法
7932
查看次数

HAproxy域名到基于路径(url)的路由的后端映射

HAProxy是否支持域名到后端映射以进行基于路径的路由.

目前它支持vhost的地图:

frontend xyz
   <other_lines>
   use_backend backend1 if { hdr(Host) -i myapp.domain1.com }
   use_backend backend2 if { hdr(Host) -i myapp.domain2.com }
Run Code Online (Sandbox Code Playgroud)

可以使用地图重写为:

frontend xyz
   <other_lines>
   use_backend %[req.hdr(host),lower,map_dom(/path/to/map,default)]
Run Code Online (Sandbox Code Playgroud)

以地图文件的内容为:

#domainname  backendname
myapp.domain1.com backend1
myapp.domain2.com backend2
Run Code Online (Sandbox Code Playgroud)

但是,如果路由基于路径,如下例所示:

frontend xyz
   acl host_server_myapp hdr(host) -i myapp.domain.com
   acl path_path1 path_beg /path1
   acl path_path2 path_beg /path2
   use_backend backend1 if host_server_myapp path_path1
   use_backend backend2 if host_server_myapp path_path2
Run Code Online (Sandbox Code Playgroud)

是否可以为此用例进行映射?使用base而不是hdr(host)可能会给出整个路径,但它不具有域的灵活性,因为它base是字符串比较.还有其他方法可以将其转换为haproxy地图.

haproxy

8
推荐指数
1
解决办法
6729
查看次数

HAProxy负载平衡TCP流量

使用HAProxy,我正在尝试(TCP)负载平衡Rserve(在TCP套接字中侦听用于调用R脚本的服务)在2个节点中的端口6311上运行.

下面是我的配置文件.当我运行HAProxy时,它的状态没有任何问题.但是当我连接到平衡节点时,低于错误.配置有什么问题?

Handshake failed: expected 32 bytes header, got -1

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    #option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout …
Run Code Online (Sandbox Code Playgroud)

tcp load-balancing haproxy rserve

8
推荐指数
1
解决办法
4万
查看次数

带有https和kerberos的HAProxy

我正在尝试在我们的系统中为微服务架构实现反向代理。

代理服务器是HAProxy,可与SSL终止一起使用,并且需要使用Https和Kerberos身份验证将请求代理到后端服务器。我成功终止了代理服务器上的ssl并将请求传递给https服务器(我需要终止才能将请求的内容按它们的主体路由到特定的后端服务),但是无法通过后端服务器上的kerberos进行身份验证。

是否可以在代理服务器上实现Kerberos身份验证,然后将TGT传递给其他后端服务?

ssl reverse-proxy kerberos windows-authentication haproxy

8
推荐指数
1
解决办法
552
查看次数

无法在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要

我有一个已部署的 emberjs 应用程序,在 google chrome 浏览器中,我收到 2 个 .js 文件的以下错误。

无法在资源 'http://staging.org.com/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js' 的 'integrity' 属性中找到有效的摘要,计算出的 SHA-256 完整性为 'Sb4Xc/Oub27QW0MKlq.Mg7mg7s' 资源被屏蔽了

当我检查文件时,我可以看到有问题的两个 .js 文件的脚本标签。我不是 100% 确定这种完整性检查是如何工作的。您可以在下面看到 sha 的完整性属性。

<script src="/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js" integrity="sha256-s3XY9h9v9IThygF6UkWRvWZsf7zeTqYJ1rLfDgg1bS0= sha512-k3lfqdeZw3OcsECfD3t99Hidh6IoRlFSoIu5nJk0FkLYHwx0q/rddirj4jh4J73dmLwKfG9mx0U5Zf6ZzRBsvA==" ></script>
<script src="/assets/g-web-56670cf0485cf52f54589091e2a25cc8.js" integrity="sha256-jNmWqO61OPijscQ5cHVSbB1Ms5wKX78ZACYdhrUo3X4= sha512-oiksgRFsqgHaCvXPvd3SAsUuX4zPeVClQBIgrOgIKNBMa3hPqCHknoFqDGRtSyfN4EdIkfk/x1zSqBqRvONAGQ==" ></script>
Run Code Online (Sandbox Code Playgroud)

emberjs 应用程序是使用 docker 映像构建的,部署到 kubernetes 并且运行 haproxy 的 aws elb 正在处理该应用程序的路由,以便当我导航到staging.x.com它时,路由到该服务(emberjs web 应用程序)的 kubernetes 中的内部 dns。

有什么值得注意的;

  1. ember serve在本地运行可以正常工作并且应用程序加载正常。
  2. 在本地构建和运行 docker 镜像工作正常,应用程序加载正常。

该问题仅发生在我部署的登台环境中。

javascript haproxy ember.js ember-cli kubernetes

8
推荐指数
2
解决办法
2万
查看次数

多线程如何影响 http keep-alive 连接?

var (
    httpClient *http.Client
)

const (
    MaxIdleConnections int = 20
    RequestTimeout     int = 5
)

// init HTTPClient
func init() {
    client := &http.Client{
        Transport: &http.Transport{
            MaxIdleConnsPerHost: MaxIdleConnections,
        },
        Timeout: time.Duration(RequestTimeout) * time.Second,
    }

    return client
}

func makeRequest() {
    var endPoint string = "https://localhost:8080/doSomething"

    req, err := http.NewRequest("GET", ....)
    
    response, err := httpClient.Do(req)
    if err != nil && response == nil {
        log.Fatalf("Error sending request to API endpoint. %+v", err)
    } else {
        // Close the connection to …
Run Code Online (Sandbox Code Playgroud)

apache http keep-alive haproxy go

8
推荐指数
1
解决办法
412
查看次数