标签: haproxy

如何配置HAProxy以将GET和POST HTTP请求发送到两个不同的应用程序服务器

我正在使用RESTful架构.我有两个运行的应用服务器.一个应该只服务GET请求而其他应该只服务POST请求.我想配置HAProxy以根据上述条件对请求进行负载均衡.请帮我

haproxy

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

经济高效地终止大量SSL连接

我最近建立了一个基于Node.js的Web套接字服务器,该服务器已经过测试,可以在一个小的EC2实例(m1.small)上每秒处理大约2,000个新的连接请求.考虑到m1.small实例的成本,以及将多个实例放在支持WebSocket的代理服务器(如HAProxy)后面的能力,我们对结果非常满意.

但是,我们意识到我们尚未使用SSL进行任何测试,因此研究了许多SSL选项.很明显,终止代理服务器上的SSL连接是理想的,因为代理服务器可以检查流量并插入诸如X-Forward-For之类的标头,以便服务器知道请求来自哪个IP.

所以我研究了许多解决方案,如Pound,stunnel和stud,所有这些解决方案都允许终止443上的传入连接,然后传递到端口80上的HAProxy,然后将连接传递到Web服务器上.然而不幸的是,我发现在c1.medium(高CPU)实例上向SSL终止代理服务器发送流量非常快速地消耗了所有CPU资源,并且仅以每秒50个左右的请求速率消耗.我尝试使用上面列出的所有三个解决方案,并且所有这些解决方案的表现大致相同,我认为它们都依赖于OpenSSL.我尝试使用64位非常大的高CPU实例(c1.xlarge),发现性能只能随成本线性增长.因此,基于EC2定价,我需要为每秒200个SSL请求支付大约600美元/手,而不是每秒2,000个非SSL请求60美元/米.当我们开始计划每秒接受1,000或10,000个请求时,前一个价格在很快就变得经济上不可行.

我也尝试使用Node.js的https服务器终止SSL,性能与Pound,stunnel和stud非常相似,所以没有明显的优势.

因此,我希望有人可以提供帮助,建议我如何克服这个荒谬的成本,我们必须吸收提供SSL连接.我听说SSL硬件加速器提供了更好的性能,因为硬件设计用于SSL加密和解密,但由于我们目前正在为所有服务器使用Amazon EC2,因此除非我们有单独的数据,否则不能使用SSL硬件加速器以物理服务器为中心.我只是在努力想知道亚马逊,谷歌,Facebook等公司如何能够通过SSL提供所有流量,而其成本如此之高.那里必须有更好的解决方案.

任何建议或想法将不胜感激.

谢谢马特

ssl openssl haproxy stunnel node.js

13
推荐指数
2
解决办法
5228
查看次数

将WebSockets与代理和负载均衡器一起使用有什么问题?

我正在阅读SockJS节点服务器.文件说:

WebSockets通常不能很好地与代理和负载均衡器配合使用.在Nginx或Apache之后部署SockJS服务器可能会很痛苦.幸运的是,最新版本的优秀负载均衡器HAProxy能够代理WebSocket连接.我们建议将HAProxy作为前线负载均衡器,并使用它来分离来自普通HTTP数据的SockJS流量.

我很好奇是否有人可以在这种情况下扩展HAProxy正在解决的问题?特别:

  1. 为什么websockets不能与代理和负载均衡器搭配得很好?
  2. 为什么在Apache背后部署Sockjs服务器是痛苦的?

haproxy websocket sockjs

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

Haproxy路由和基于URI路径的重写

我正在尝试设置Haproxy来对由uri路径标识的一些后端进行负载均衡请求.例如:

https://www.example.com/v1/catalog/foo/bar

应该导致"catalog-v1"后端.

事情是每个应用程序响应不同的路径,所以我不仅要识别应用程序,还要重写URL路径.例如

我知道我不应该使用Haproxy进行重写,但现在这是不可避免的.

尝试了以下正则表达式,该正则表达式适用于regex101:

([a-z.]*)\/([a-z0-9\-\.]*)\/([a-z\-]*)\/(.*)
Run Code Online (Sandbox Code Playgroud)

代换:

\1/\3-\2/\4
Run Code Online (Sandbox Code Playgroud)

最后这里是haproxy.config:

global
    daemon
    user root
    group root
    maxconn 256000
    log     127.0.0.1 local0
    log     127.0.0.1 local1 notice
    stats   socket /run/haproxy/stats.sock mode 777 level admin
defaults
    log      global
    option   dontlognull
    maxconn  4000
    retries  3
    timeout  connect 5s
    timeout  client  1m
    timeout  server  1m
    option   redispatch
    balance  roundrobin

listen stats :8088
    mode http
    stats enable
    stats uri /haproxy
    stats refresh 5s

backend catalog-v1
    mode http
    option httpchk …
Run Code Online (Sandbox Code Playgroud)

regex rewrite load-balancing path haproxy

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

如何平衡容器?

如何加载平衡运行简单Web应用程序的docker容器?

我在一个主机中运行了3个Web容器.如何对我的Web容器进行负载平衡?

load-balancing nginx haproxy docker coreos

13
推荐指数
1
解决办法
7772
查看次数

HAProxy CORS OPTIONS标头拦截设置

通过我的NGinx设置,我能够拦截来自ajax预检的OPTIONS请求,并使用正确的CORS标头和200响应进行响应,以便请求可以继续进行.我正在尝试将我的前端代理合并到HAProxy中,并且在解决这个难题时遇到了一些问题.

我的特殊问题是,当有服务器能够正确响应OPTIONS请求时,我能够添加正确的CORS选项,但是当发出预检请求时,一些后端无法处理/响应405错误.我的haproxy.cfg包含以下用于添加标题的行:

capture request header origin len 128
http-response add-header Access-Control-Allow-Origin %[capture.req.hdr(0)] if { capture.req.hdr(0) -m found }
rspadd Access-Control-Allow-Credentials:\ true if { capture.req.hdr(0) -m found }
rspadd Access-Control-Allow-Headers:\ Origin,\ X-Requested-With,\ Content-Type,\ Origin,\ User-Agent,\ If-Modified-Since,\ Cache-Control,\ Accept if { capture.req.hdr(0) -m found }
rspadd Access-Control-Allow-Methods:\ GET,\ POST,\ PUT,\ DELETE,\ OPTIONS if { capture.req.hdr(0) -m found }
rspadd Access-Control-Max-Age:\ 1728000 if { capture.req.hdr(0) -m found }
Run Code Online (Sandbox Code Playgroud)

解决方案:

当您从客户端的请求设置所有正确的标头时,如何在不将请求传递给Web服务器的情况下使用HAProxy发送响应,但不是动态的,这不是理想的解决方案.

任何帮助,将不胜感激!

ajax haproxy cors preflight

13
推荐指数
2
解决办法
9148
查看次数

HAProxy和URL重写配置

我想问一下HAProxy如何根据URL的部分来帮助路由请求.

为了概述我的设置,我有HAProxy机器和两个后端:

  • IIS网站(主站点)
  • NGINX上的Wordpress博客(一个子网站)

用例:

我希望根据URL路由请求:

  • www.website.com/lang/index.aspx - >主要网站
  • www.website.com/lang/blog/articlexx - >博客子网站

博客访问URL是" / server/blog/lang/articlexx ",因此我必须将原始客户端请求重写为该格式 - 这基本上是切换"blog"和"lang".

从我如何理解配置文档和网上的一些帖子,我可以使用reqrep/reqirep来更改请求HTTP标头,然后再将其传递给后端.如果这是正确的,那么这个配置应该工作:

frontend vFrontLiner
    bind            x.x.x.x:x
    mode            http
    option          httpclose
    default_backend iis_website

    # the switch: x/lang/blog -? x/blog/lang
    reqirep ^/(.*)/(blog)/(.*) /if\2/\1/\3

    acl blog path_beg -i /lang/blog/

    use_backend blog_website if blog


backend blog_website
    mode    http
    option  httpclose
    cookie  xxblogxx insert indirect nocache
    server  BLOG1 x.x.x.x:80 cookie s1 check inter 5s rise 2 fall 3
    server  BLOG2 x.x.x.x:80 cookie s2 check inter 5s rise 2 …
Run Code Online (Sandbox Code Playgroud)

regex wordpress nginx url-rewriting haproxy

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

以编程方式将节点添加到负载均衡器,如Haproxy?

我非常肯定这个问题已经解决了,但我找不到任何关于它的信息......

sysadmins如何以编程方式将新节点添加到现有且正在运行的负载均衡器?假设我有一个负载均衡器正在运行并已经在两个EC2实例之间说我的API服务器,突然出现流量峰值,我需要负载均衡器中的第三个节点但是我睡着了...如果我会很好有什么监控可能RAM使用和一些关键性能指标告诉我何时应该有另一个节点,甚至更好,如果它可以单独向负载均衡器添加一个新节点...

我相信这对于node-http-proxy分发来说是可能的,甚至是微不足道的,但我想知道这是否可以与HAproxy和/或Nginx一起使用......我知道亚马逊的弹性负载平衡可能是我最好的选择,但我想自己做(我想从rackspace,EC2,Joyent和其他人那里生成实例,因为它很方便).

再一次,产生一个节点很容易,我想知道如何将它添加到haproxy.cfg或与Nginx类似的东西,而无需重新加载整个代理,并以编程方式进行.Bash脚本是我最好的选择,但它仍然需要重新加载整个代理,这是坏的,因为它失去了连接...

proxy reverse-proxy load-balancing nginx haproxy

12
推荐指数
2
解决办法
5369
查看次数

HAProxy - 配置HTTP前端以侦听多个端口

我在我的HAProxy配置中有一个HAProxy HTTP前端,如下所示:

frontend myaddress.net :10098
  bind :80,:8080
  mode http
  log global
  option http-server-close
  timeout client 14400000
  timeout connect 60000
  timeout tunnel 14400000
  timeout http-request 14400000
  capture request header User-Agent len 64
  capture request header Accept-language len 64
  capture request header x-forward len 15
  capture request header host len 64
  capture request header X-Orig-Base len 64
  capture request header X-Orig-Host len 64
  capture request header X-Orig-Proto len 64

  reqadd X-Original-host:\ myaddress.net

  acl is-ssl hdr(X-Orig-Proto) https
  acl is-http hdr(X-Orig-Proto) http

  redirect code …
Run Code Online (Sandbox Code Playgroud)

haproxy

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

如何使用HAProxy重定向URL

我需要将www.foo.com和foo.com重定向到haproxy的www.bar.com,这是我的配置:

frontend  http-in
    bind *:80

    acl bar.com hdr(host) -i www.bar.com
    ...
    use_backend     bar.com_cluster if bar.com
    ... 
    redirect prefix http://foo.com code 301 if { hdr(host) -i www.bar.com }
    redirect prefix http://www.foo.com code 301 if { hdr(host) -i www.bar.com }
    ...

backend bar.com_cluster
    balance roundrobin
    option httpclose
    option forwardfor
    server bar 10.0.0.1:80 check
Run Code Online (Sandbox Code Playgroud)

我试过redirect prefix但不工作,有什么想法吗?

haproxy

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