标签: haproxy

用于解析HttpLog格式的正则表达式模式

我正在为HttpLogFormat中的String寻找一个正则表达式模式匹配器.该日志由haproxy生成.以下是此格式的示例字符串.

Feb 6 12:14:14 localhost haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} {} "GET /index.html HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)

HttpLogFormat提供了格式说明.任何帮助表示赞赏.

我试图获得该行中包含的各种信息.以下是字段:

  1. process_name'['pid']:'
  2. client_ip':'client_port
  3. '['accept_date']'
  4. frontend_name
  5. backend_name'/'server_name
  6. Tq'/'Tw'/'Tc'/'Tr'/'Tt*
  7. STATUS_CODE
  8. bytes_read缓存
  9. captured_request_cookie
  10. captured_response_cookie
  11. termination_state
  12. actconn'/'feconn'/'beconn'/'srv_conn'/'重试
  13. srv_queue'/'backend_queue
  14. '{'captured_request_headers*'}'
  15. '{'captured_response_headers*'}'
  16. '''http_request'''

regex logging haproxy

7
推荐指数
1
解决办法
3570
查看次数

Sentry + Raven,HTTP错误401:未经授权

我有一个Sentry应用程序,在url上正确运行:mydomain.com:11011.

我有一个用CDN创建的项目:http:// XXX:YYY@mydomain.com:11011/2

使用此配置,此URL与HAProxy一起提供:

listen sentry *:11011
    mode tcp
    server app1 localhost:9005 maxconn 32
Run Code Online (Sandbox Code Playgroud)

哨兵的配置:

SENTRY_KEY = 'foo'
SENTRY_PUBLIC = True
SENTRY_URL_PREFIX = 'http://mydomain.com:11011'  # No trailing slash!
SENTRY_WEB_HOST = 'localhost'
SENTRY_WEB_PORT = 9005
SENTRY_WEB_OPTIONS = {
    'workers': 1, # the number of gunicorn workers
    'worker_class': 'gevent',
}
Run Code Online (Sandbox Code Playgroud)

但是当我从同一台服务器上尝试Raven测试时,我的身份验证有问题:

$ raven test http://XXX:YYY@mydomain.com:11011/2
HTTPError: HTTP Error 401: UNAUTHORIZED
Run Code Online (Sandbox Code Playgroud)

也失败了:

$ raven test http://XXX:YYY@localhost:9005/2
HTTPError: HTTP Error 401: UNAUTHORIZED
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?谢谢.

python django haproxy sentry raven

7
推荐指数
1
解决办法
1931
查看次数

Apache Tomcat 7在每个请求上更改JSESSIONID

这个问题让我感到疯狂,所以也许有人可以帮我理解问题所在.我有一个tomcat web应用程序正面向HAProxy.HAProxy也在进行SSL卸载,并配置为使用粘性会话.我正在使用Tomcat的会话复制功能,这似乎工作正常.会话出现在两个appservers上.

出于某种原因,Tomcat为每个Web请求生成一个新的JSESSIONID,然后将旧会话的内容复制到新会话中.也就是说,我的会话内容仍在新会话中,但会生成新ID并将其发送回客户端.但它只对我的Web应用程序执行此操作.它不会对/ manager应用程序执行此操作.

我已经尝试了本书中的每一个技巧,比如在我的context.xml中设置它:

<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" changeSessionIdOnAuthentication="false" />
Run Code Online (Sandbox Code Playgroud)

并在我的Context元素上设置这些属性:

<Context path="/myapp" reloadable="false" override="true" useNaming="false" allowLinking="true" useHttpOnly="false" sessionCookiePath="/" sessionCookiePathUsesTrailingSlash="false">
Run Code Online (Sandbox Code Playgroud)

而且,结果仍然是一样的.Tomcat为每个请求生成一个新的会话ID,并将旧会话的内容复制到新的id中.

我怀疑它与HAProxy有关,除了/ manager应用程序也在HAProxy后面,它没有表现出这种行为.

为什么Tomcat这样做,我该怎么做才能阻止它呢?

java session tomcat haproxy jsessionid

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

当所有后端服务器都关闭时,如何使HAProxy拒绝TCP连接

我们使用HAProxy将传入的TCP连接转发到使用原始TCP的单独服务器.我们看到的问题是客户端连接被接受然后关闭而不是立即被拒绝.由于我们已启用运行状况检查,HAProxy是否有任何方法可以从端口解除绑定,以便初始连接失败?

listen custom_forward
   mode tcp
   bind *:11144
   default-server inter 10m fastinter 20s downinter 1m maxconn 100
   server custom_server hostname:10144 check
Run Code Online (Sandbox Code Playgroud)

haproxy

7
推荐指数
1
解决办法
6411
查看次数

我可以将ZeroMQ与基于软件的负载均衡器HAProxy一起使用吗?

HAProxy是一个基于软件的负载均衡器,支持http和tcp分发.如果我使用启用实用组播的ZeroMQ(pgm),那么使用HAProxy作为zmq对等体之间的中介是否与pgm冲突,还是应该使用基于硬件的负载均衡器,如F5?

tcp load-balancing haproxy zeromq pgm-protocol

7
推荐指数
1
解决办法
1151
查看次数

如何根据请求正文使用 HAProxy 路由流量(反向代理)

我正在尝试根据下面 POST 正文中标识的 URL 将以下请求路由到适当的服务器。我希望通过使用 HAProxy 的反向代理来实现这一点。

例如,我想将所有请求定向到 HAProxy,而不是让 HAProxy 检查 POST 正文中是否存在某些值(例如通知 url 值“pingpong”),如果是这种情况,请将流量路由到我将指定的内点在配置中。

POST /someURL/file.jsp HTTP/1.1
Host: 10.43.90.190:80
Content-Type: application/json
Connection: keep-alive
Accept: */*
Content-Length: 256

{"Info": {"groupName":"thisgroup1","Id":"M1234R456","id2":"TUP1234",
    "countryCode":"USA","carrierCode":"USAIC","e164Address":"123456768789",
    "notificationURL":"http:\/\/www.pingpong.com\/notify",
    "timestamp":"2014-03-04T17:33:30.000Z"}}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用 acl 来搜索请求正文中的内容“乒乓”,并根据这个值,我会适当地路由它吗?

谢谢!

acl haproxy

7
推荐指数
1
解决办法
5239
查看次数

strophe.js http-bind错误504

以下请求经常超时:

<body rid='57993057' xmlns='http://jabber.org/protocol/httpbind' sid='1db840cbfd20e3922f594cc2017421a1858cca7a'><a xmlns='urn:xmpp:sm:3' h='9'/></body>
Run Code Online (Sandbox Code Playgroud)

控制台日志显示:

请求的资源上不存在"Access-Control-Allow-Origin"标头.

我正在使用带有haproxy的ejabberd服务器.

ejabberd haproxy strophe

7
推荐指数
0
解决办法
138
查看次数

HAProxy中的JWT验证

我有一个HAProxy配置为接受*.mysubdomain.com的请求.HAProxy将解析子域(prod或dev来自prod.mysubdomain.com或dev.mysubdomain.com)并转发到正确的后端.存在两个后端,一个用于产品,一个用于开发.每个后端包含两个服务器条目,指向每个子域上的Marathon LB实例.

子域需要JWT cookie才能在后端进行身份验证.我有公钥来检查JWT的有效性,但是希望在HAProxy中这样做.有没有办法添加我自己的代码来执行HAProxy配置中的JWT有效性检查?

HAProxy配置文件如下:

global
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80
    mode http

    # Returns true when one of the headers contains one of the strings either isolated or delimited by dots. This is used to perform domain name matching.
    acl host_dev hdr_dom(host) -i dev
    acl host_prod hdr_dom(host) -i prod

    acl jwtPresent req.cook(JWT) -m found

    use_backend prod_domain if jwtPresent host_prod
    use_backend dev_domain if jwtPresent host_dev

    default_backend prod_domain …
Run Code Online (Sandbox Code Playgroud)

haproxy jwt

7
推荐指数
2
解决办法
3298
查看次数

飞溅容器在30分钟后停止工作

我有水族馆和飞溅的问题.他们在开始后30分钟后停止工作.加载的页数为50K-80K.我做了cron工作,每10分钟自动重启一次,每个Splash容器,但它不起作用我该如何解决?

这是截图 在此输入图像描述 来自HAProxy的统计数据 在此输入图像描述 这是Splash配置

splash0:
    image: scrapinghub/splash:3.0
    command: --max-timeout 3600 --slots 150 --maxrss 1000 --verbosity 5
    logging:
      driver: "none"
    expose:
        - 8050
    mem_limit: 1000m
    memswap_limit: 1000m
    restart: always
Run Code Online (Sandbox Code Playgroud)

和HAProxy

    backend splash-cluster
    option httpchk GET /
    balance leastconn

    # try another instance when connection is dropped
    retries 2
    option redispatch
    server splash-0 splash0:8050 check maxconn 150 inter 2s fall 10 observe layer4
backend splash-misc
    balance roundrobin
    server splash-0 splash0:8050 check fall 15
Run Code Online (Sandbox Code Playgroud)

更新1 这是重启的脚本

    #!/bin/sh

echo "BEGIN" >> restart.log
for index …
Run Code Online (Sandbox Code Playgroud)

haproxy docker splash-js-render

7
推荐指数
0
解决办法
477
查看次数

HAProxy http-request 将特定路径重定向到另一个路径

我对 HTTP 协议和一点点 HAProxy 非常熟悉,但我以前从未真正搞过 URL 重写和重定向。现在,我有 2 个“简单”的 HTTP 重定向要求,我一直很难弄清楚。

  1. https://appserver.example.com应重定向到https://appserver.example.com/myapp/webapp/?auth=saml将用户指向saml登录页面。
  2. https://appserver.example.com/?auth=standard应该重定向到https://appserver.example.com/myapp/webapp/?auth=standard

要求 1 工作正常:

myuser:~ myuser$ curl -I https://appserver.example.com
HTTP/1.1 301 Moved Permanently
Content-length: 0
Location: https://appserver.example.com/myapp/webapp/?auth=saml
Connection: close

myuser:~ myuser$ 
Run Code Online (Sandbox Code Playgroud)

但我在如何实施#2 上遇到了困难。正如我所想,关键是添加一个acl,然后在匹配http-request redirect prefix时添加另一行。acl

acl is_auth_std path /?auth=standard
http-request redirect prefix /myapp/webapp/?auth=standard code 301 if is_auth_std
Run Code Online (Sandbox Code Playgroud)

但显然这还不够。/?auth=standard仍然重定向到假定的根 URL:

myuser:~ myuser$ curl -I https://appserver.example.com/?auth=standard
HTTP/1.1 301 Moved Permanently
Content-length: 0
Location: https://appserver.example.com/myapp/webapp/?auth=saml
Connection: close …
Run Code Online (Sandbox Code Playgroud)

url url-rewriting haproxy

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