为什么haproxy path_beg只有在我不访问默认站点时才有效?

时间:2011-06-01 20:03:36

标签: apache haproxy

我已将haproxy配置为将路径“/ rawman”重定向到我服务器上的端口8080。它第一次工作,但是一旦我访问默认站点,它就会停止工作。默认站点在带有mod_rewrite的apache上运行,并且它正在捕获无效请求(使用codeigniter),因此当我访问http://mysite.com/rawman?foo=bar时,我没有看到重定向的站点,而是看到了默认站点。

This is my haproxy config:

    global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

frontend http_proxy
        bind 0.0.0.0:8090
        acl is_ast path_beg /rawman
        use_backend ast if is_ast
        default_backend mysite

backend ast
        server ast 0.0.0.0:8080

backend mysite
        server local 0.0.0.0:80

1 个答案:

答案 0 :(得分:30)

尝试在option httpclose行之后设置srvtimeout

如果你不这样做,那么haproxy使用目标服务器的keepalive设置。一旦你访问主站点,连接就会被打开并保持打开状态,并且在你的下一个请求中,haproxy会哦,不是很好:我有一个开放的连接。让我们使用它,即使它不应该。设置httpclose选项后,它始终会关闭连接,确保每个新请求都使用正确的连接。

我生命中失去了3个小时来解决这个问题。