У меня есть веб-служба, которая всегда должна отвечать на запросы менее чем за 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
Вы также получаете то преимущество, что вам не нужен поток для каждого запроса.