Назад | Перейти на главную страницу

Как установить жесткий тайм-аут Apache при использовании mod_proxy?

У меня есть веб-служба, которая всегда должна отвечать на запросы менее чем за 5 секунд. Я использую Apache для прокси-запросов к кластеру серверных рабочих. Когда все воркеры заполнены, Apache ставит запросы в очередь и ожидает освобождения воркера.

Я установил тайм-аут 5 в моем VirtualHost

Похоже, что mod_proxy берет на себя директиву Timeout и использует ее для ограничения времени, которое может потребоваться исполнителю, чтобы ответить на запрос. Это означает, что запросы могут быть сохранены в очереди, и их время ожидания не превышает 5 секунд. Мне нужно ответить 504, если я не могу выполнить запрос менее чем за 5 секунд, время, проведенное в прокси-воркере, - это не то, что я хочу ограничить, это общее время открытого соединения. В качестве альтернативы, если бы был способ ограничить время ожидания бесплатного рабочего, это могло бы сработать, но ни одна из директив балансировщика, похоже, этого не делает (я пробовал много из них)

Как я могу сделать запросы тайм-аута Apache через 5 секунд, независимо от того, что происходит в моем рабочем кластере?

Вы пробовали установить

ProxyTimeout

в твоем конфиге?

http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxytimeout

Вероятно, вы захотите использовать лучший инструмент, например HAProxy, который предназначен только для проксирования и имеет очень гибкую конфигурацию тайм-аута, которая позволит вам указать общие тайм-ауты или тайм-ауты только для запросов в очереди:

НАПРИМЕР:

defaults
    balance roundrobin
    mode http
    timeout connect 4000ms
    timeout queue   1000ms
    timeout client  4000ms
    timeout server  4000ms
    timeout http-request  4000ms
    option httpclose
    option redispatch

Вы также получаете то преимущество, что вам не нужен поток для каждого запроса.