Le 06/11/2020 à 19:56, Harris Kaufmann a écrit :
Hi everyone,

I wanted to try the FastCGI multiplexing feature, but whatever I do HAProxy never sends multiple requests simultaneously over the same backend connection. This is my configuration:

------------------------------------------------------------------------------

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


backend fastcgi
     server server0 127.0.0.1:9002 <http://127.0.0.1:9002> proto fcgi maxconn 1
     use-fcgi-app fcgi-app

fcgi-app fcgi-app
     docroot /
     option mpxs-conns
     option max-reqs 20
     no option get-values

frontend web
     bind *:8080
     default_backend fastcgi

------------------------------------------------------------------------------

When I send multiple HTTP requests that overlap, Haproxy just executes them serially with new backend connections for each request (because of maxconn) and most of them time out. Is my configuration wrong? Did I misunderstand this feature?


You must first be sure you FCGI application support the connection multiplexing. For instance, php-fpm is unable to do so. Then, the "maxconn" on a server line in HTTP mode will limit the number of concurrent requests. Not the number of concurrent connections. From the doc :

  maxconn <maxconn>

  [...]
  In HTTP mode this parameter limits the number of concurrent requests instead
  of the number of connections. Multiple requests might be multiplexed over a
  single TCP connection to the server. As an example if you specify a maxconn
  of 50 you might see between 1 and 50 actual server connections, but no more
  than 50 concurrent requests.

Thus, you should set maxconn to 20 (same than max-reqs FCGI option). But, this way you should be prepared to open at most 20 connections.

--
Christopher Faulet

Reply via email to