Почему haproxy path_beg работает, только если я не посещаю сайт по умолчанию?

#apache #haproxy

#apache #haproxy

Вопрос:

Я настроил haproxy перенаправлять путь «/rawman» на порт 8080 на моем сервере. Это работает в первый раз, но как только я захожу на сайт по умолчанию, он перестает работать. Сайт по умолчанию запущен в apache с mod_rewrite и он перехватывает недопустимые запросы (используя 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:

Попробуйте установить значение option httpclose после srvtimeout строки.

Если вы этого не сделаете, то haproxy использует настройку keepalive целевого сервера. Как только вы посещаете основной сайт, соединение открывается и остается открытым, и при вашем следующем запросе haproxy выдает о, разве это не здорово: у меня открытое соединение. Давайте просто используем его, даже если это не должно. При установленном параметре httpclose соединение всегда закрывается, гарантируя, что каждый новый запрос использует правильное соединение.

Потерял 3 часа своей жизни, выясняя это.

Комментарии:

1. о, потрясающе! Я пытался заставить это работать весь день, спасибо!!

2. Я потерял дни на это. Большое вам спасибо. Должно быть, это ошибка HAProxy.

3. За это вас следует наградить медалью. Этот ответ должен быть принят!