标签: haproxy

由于持久连接,HAProxy 没有负载均衡

我们有一个 Web 服务器和一个客户端,两者都是用 Go 编写的,可以相互交互。我们希望 HAProxy 在服务器的多个实例之间负载平衡请求,但它不起作用。当服务器仍在运行时,客户端将始终连接到同一服务器。

如果我查看“netstat -anp”的输出,我可以看到客户端和服务器之间通过 HAProxy 建立了持久连接。我尝试将响应中的连接标头设置为“关闭”,但这根本不起作用。

不用说,我对此完全感到困惑。我的第一个问题是,这是客户端、服务器还是 HAProxy 的问题吗?如何强制客户端断开连接?我是否遗漏了一些与此相关的内容?Curl 工作正常,所以我知道 HAProxy 可以进行负载平衡,但curl 在完成后也会完全关闭,因此我怀疑是持久连接导致了我的问题,因为客户端和服务器长时间运行。

仅供参考,我在服务器上使用 go-martini。

谢谢。

haproxy go martini

2
推荐指数
1
解决办法
2994
查看次数

非标准 HTTP 标头“X-Forwarded-Host”等出现在 HTTP 响应中

我们在AWS上部署了一个应用程序。在前面,AWS 负载均衡器接受所有传入的 HTTP 请求;EC2 实例直接位于该平衡器后面。在单个实例上,HAproxy 接收所有请求,然后委托给基于 Java 的真实应用程序服务器(在我们的特殊情况下,haproxy 和业务应用程序服务器位于同一个 EC2 实例上,haproxy 不扮演负载平衡角色,仅用于中继http请求,也就是说haproxy和应用服务器是一一映射的)。

当我们尝试启动对此系统的 http 调用时:

要求

GET /token HTTP/1.1
Host: xxx.xxx.xxx.xxx
Run Code Online (Sandbox Code Playgroud)

回复

HTTP/1.1 403 Forbidden 
X-Forwarded-Proto: https 
X-Forwarded-For: xxx.xxx.xxx.xxx 
X-Forwarded-Port: 443 
X-Forwarded-Host: xx.xx.xx.xxx 
Date: Wed, 09 Dec 2015 22:04:06 GMT 
Server: WSO2-PassThrough-HTTP 
Run Code Online (Sandbox Code Playgroud)

根据我的理解,X-Forwarded-*应该只出现在服务器端,以便服务器在中间有代理时识别传入请求的来源。我不知道为什么这些标题也出现在响应中。这让我担心内部 IP 会泄露给潜在的恶意客户端。

以下是haproxy设置的代码片段:

frontend worker
bind :443 ssl crt xxx crt xxx crt xx accept-proxy no-sslv3 no-tls-tickets
mode http
acl forwarded hdr_cnt(X-Forwarded-Host) gt 0
acl trusted src 127.0.0.0/24
capture request header X-Forwarded-For len 64
default_backend …
Run Code Online (Sandbox Code Playgroud)

haproxy amazon-web-services x-forwarded-for

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

我使用 haproxy 作为 mariadb 集群的 banlancer?但在查询期间失去了连接

我使用 haproxy 作为 mariadb galera 集群的 banlancer,它可以正常连接并执行一些操作,但几秒钟后我想再次进行一些搜索,但在查询错误期间丢失了连接。请参阅下图的错误。

失去连接img

这是我的 haproxy.cfg

 defaults
        log                     global
        mode                    tcp
        option                  tcplog
        option                  dontlognull
        option http-server-close
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          50000ms
        timeout server          50000ms
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
Run Code Online (Sandbox Code Playgroud)

以及 haproxy.cfg 中 mariadb 集群的余额

listen mariadb_cluster_writes 0.0.0.0:50613    
    ## A failover pool for writes to ensure writes only hit one node at a time.
        mode tcp
        #option httpchk
        option tcpka
        option mysql-check …
Run Code Online (Sandbox Code Playgroud)

cluster-computing haproxy mariadb galera

2
推荐指数
1
解决办法
4712
查看次数

Haproxy 健康检查端口

我正在尝试思考在与常规流量不同的端口上进行 haproxy 运行状况检查的优缺点。

如果服务器过载,则在不同端口上进行健康检查可能会将服务器标记为已启动,即使在过载时也是如此。我认为这是一件好事,因为让服务器脱机可能会使过载问题变得更糟,但我想确认这是有道理的。不过,我似乎找不到关于权衡的任何好的文档,并且想知道是否有人对权衡有很好的分析。

haproxy

2
推荐指数
1
解决办法
5311
查看次数

使用haproxy的http请求到https请求

我有一种情况,我想使用 haproxy 将所有 http 请求重定向到 https 请求。假设我有一台安装了 haproxy 的服务器 x 和一台运行实际服务的服务器 y(使用 ssl)。现在,我希望 haproxy 接受 http 请求并通过 https 将其转发到后端服务器。有点像这样:

用户 <--(http)--> haproxy <--(https)--> 实际服务

到目前为止我所做的是,前端接受端口 8080 中的 http 连接,并将其发送到其默认后端,在后端我已添加“ssl verify none”。

使用此功能,我可以从 http 加载页面,但每当我提交请求(例如登录)时,响应都会来自 http url,但没有任何效果。

我不知道这是否可能。

如果我需要提供更多详细信息,请告诉我。

对此的任何了解都会非常友善。

提前致谢。

ssl haproxy

2
推荐指数
1
解决办法
5375
查看次数

记录 HAProxy 自定义标头

我希望让 HAProxy 设置自定义标头记录它。

下面是我的 haproxy.cfg 的配对示例(我省略了一些我认为与我的问题无关的 SSL 详细信息和多个后端)

global
    log 127.0.0.1 local0 debug

defaults
    log global
    stats enable
    option httplog


frontend httpFrontendi
    mode http
    bind *:80    
    http-request add-header Foo Bar
    capture request header Foo len 64
    log-format Foo\ %[capture.req.hdr(0)]\ %hr\ %hrl\ %hs\ %hsl  

    default_backend backend_api
    redirect scheme https code 301 if !{ ssl_fc }


backend backend_api
    mode http
    balance roundrobin
    option httpchk HEAD /api/test_db HTTP/1.0
    server backend_api1 ip:80 check inter 5s rise 2 fall 3
Run Code Online (Sandbox Code Playgroud)

我调用代理:

curl 127.0.0.1 …
Run Code Online (Sandbox Code Playgroud)

logging redhat haproxy

2
推荐指数
1
解决办法
6846
查看次数

Haproxy 粘性会话

我正在尝试使用Haproxy 1.6.3 2015/12/25粘性会话。我根据haproxy 手册做了所有事情,但是,不幸的是,检查客户端浏览器时,我发现没有添加 cookie(平衡器必须在第一个请求后在响应中返回 cookie,但它什么都不返回我,并且什么也没发生(没有饼干))。其他一切都完美无缺,但 cookie 不行。我附上了我的 haproxy.cfg:

global
  log /dev/haproxy/log local0
  log /dev/haproxy/log local1 notice
  chroot /var/lib/haproxy
  stats socket /run/haproxy/admin.sock mode 660 level admin
  stats timeout 30s
  user haproxy
  group haproxy 
  daemon

defaults
  log global
  mode http
  option httplog
  option dontlognull
  timeout connect 5000ms
  timeout client 50000ms
  timeout server 50000ms

  stats enable
  stats auth user:pass
  stats uri /haproxy_stats

  option httpchk HEAD / HTTP/1.0
  option redispatch

  balance roundrobin

frontend frontend_http
  bind *:80
  option forwardfor
  default_backend …
Run Code Online (Sandbox Code Playgroud)

iis load-balancing haproxy ubuntu-16.04

2
推荐指数
1
解决办法
9322
查看次数

如何使用nifi.web.proxy.host和nifi.web.proxy.context.path?

我已经在集群中部署了带有 Kerberos 的 NiFi,并且为了访问 UI,我使用了 haproxy。我可以通过单个节点 URL 访问 NiFi UI,但它无法与 loadbalncer URL 配合使用并出现以下错误

系统错误

请求包含无效的主机标头

我认为它可以通过 nifi.web.proxy.host 和 nifi.web.proxy.context.path 参数来修复。我尝试使用这两个参数,但问题仍然存在。

haproxy apache-nifi

2
推荐指数
1
解决办法
9722
查看次数

HAProxy 中的 Proxy_pass 等价物

HAProxy 中 Nginx pass_proxy 的等价物是什么

location /{
    proxy_pass https://WebApplication.azurewebsites.net;
  }
Run Code Online (Sandbox Code Playgroud)

我尝试测试此配置,但是当我指向具有以下配置的任何后端服务器时收到 404,而不在 root 上使用 ACL,例如使用自签名证书

    #---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log /dev/log    local0
    log /dev/log    local1 notice
    user haproxy
    group haproxy
    maxconn  16000
    stats  socket /var/lib/haproxy/stats level admin
    tune.bufsize  32768
    tune.maxrewrite  1024
    tune.ssl.default-dh-param 2048
    daemon 
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout …
Run Code Online (Sandbox Code Playgroud)

nginx haproxy azure

2
推荐指数
1
解决办法
2632
查看次数

删除或自动输入 haproxy ssl 的 pem 密码;Chrome 仍会警告 CA 未签名

我最近收到了一个用于 haproxy SSL 终止的签名证书。为了让 haproxy 使用它,我需要将 jks 文件转换为 pem 文件。首先,我将收到的 cer 文件转换为 crt,因为我之前遇到过错误,haproxy 无法在 pem 文件中找到 crt 文件。对所有证书执行此操作:

$ openssl x509 -inform PEM -in <CER file here> -out <CRT output file>
Run Code Online (Sandbox Code Playgroud)

然后我将根证书、中间证书和服务证书导入到已经拥有私钥的密钥库:

keytool -importcert -file $CERT -alias $ALIAS -keystore test.jdk
Run Code Online (Sandbox Code Playgroud)

然后我将 jsk 文件转换为 p12 文件,然后将其转换为 pem 文件:

$ keytool -importkeystore -srckeystore test.jks -destkeystore test.p12 -srcstoretype jks -deststoretype pkcs12
Enter destination keystore password:
Re-enter new password:


$ openssl pkcs12 -in test.p12 -out test.pem
Enter Import Password:
MAC verified OK
Enter PEM …
Run Code Online (Sandbox Code Playgroud)

ssl openssl certificate haproxy keytool

2
推荐指数
1
解决办法
3583
查看次数