> On 30 Jun 2017, at 8:21 AM, Graham Dumpleton <[email protected]> 
> wrote:
> 
>> 
>> On 30 Jun 2017, at 4:04 AM, John Hannon <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Hi Folks,
>> 
>> I recently migrated a WSGI app from mod_wsgi 3.2-3.el6/Apache 2.2 to 
>> mod_wsgi 4.5.15/Apache 2.4.26. 
>> 
>> On the old server I was perpetrating this hack to support long connections 
>> if the request had 'refresh' in the path (I'm on an internet, not worried 
>> about abuse).
>> 
>> 
>>  SetEnv TIMEOUT=10
>>  SetEnvIf Request_URI .*refresh.* TIMEOUT=4800
>> 
>>  Timeout %{TIMEOUT}
>> 
>> This hack no longer works. In fact, I've found that the Timeout directive 
>> has no effect on mod_wsgi unless it's declared in the 'server config' 
>> context. Apache's docs say Timeout is supposed to work in virtual host 
>> context as well.
>> 
>> No idea if this is a mod_wsgi issue or an Apache issue, just thought I'd 
>> throw it out there.
> 
> As far as I am aware, it has never been possible to override Timeout value on 
> a per request basis. Part of the reason for that is that Timeout applies to a 
> connection and not a request. A connection can technically handle more than 
> one request because of keep alive connections. I would also suggest that a 
> Timeout of 10 is too short for typical case. For mobile clients you could see 
> a higher rate of failed connections. The default used to be 300, which is way 
> too much. A value of 30-60 is more typical.
> 
> The use of Timeout is also probably the wrong way of going about this anyway, 
> as it isn't a request timeout, but a timeout on individual read or write on a 
> socket connection to recover from situation where that operation would block 
> for some reason. Depending on how you are using mod_wsgi, if the blocking 
> point is in the request handler itself, then Timeout would never kick in as 
> you aren't blocked on read request content or writing response content.
> 
> With you being on latest mod_wsgi now, and can use all the latest features, I 
> would do what you are trying using the following.
> 
> 1. Ensure you are using mod_wsgi daemon mode.
> 
> 2. Vertically partition your WSGI application across multiple mod_wsgi daemon 
> process groups so that different configuration settings can be applied to 
> each daemon process group. This enables you to direct specific requests to 
> different daemon process groups and then customise timeout settings 
> separately for different request types. The general principal of vertical 
> portioning is explained in the post:
> 
>     http://blog.dscpl.com.au/2014/02/vertically-partitioning-python-web.html 
> <http://blog.dscpl.com.au/2014/02/vertically-partitioning-python-web.html>
> 
> 3. Use socket-timeout and request-timeout options on WSGIDaemonProcess to 
> customise timeouts for long running requests which would be directed to that 
> daemon process group. See:
> 
>     
> http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html
>  
> <http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html>
> 
> 4. Use SetEnvIf or mod_rewrite to set 'mod_wsgi.process_group' variable to 
> the name of the daemon process group which should handle the request with 
> customised timeouts.

I may have got this bit a bit wrong as been a while since discussed this trick 
with anyone.

You can't simply set a variable directly.

What you may actually have to do first is add:

    WSGIProcessGroup %{ENV:PROCESS_GROUP}

and then ensure you set a default value for PROCESS_GROUP, but override it per 
request when needed.

Example from docs at:

    
http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIProcessGroup.html
 
<http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIProcessGroup.html>

is:

    RewriteEngine On
    RewriteMap wsgiprocmap dbm:/etc/httpd/wsgiprocmap.dbm
    RewriteRule . - [E=PROCESS_GROUP:${wsgiprocmap:%{REQUEST_URI}}]

    WSGIProcessGroup %{ENV:PROCESS_GROUP}

You wouldn't use that approach as you don't need a mapping file, but hopefully 
gives the right idea.

> Bit rushed for time right now, but see if you can come up with a 
> configuration based on that and will check over it for you.

Graham

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to