I got quite a lot done on mod_wsgi during my holidays, but that didn't include a simple answer to this. The idea I initially had couldn't work. The only way I have been able to work out that might work is when have request content and it is over a certain size, is to spawn a second thread for the request handler in Apache that handles pushing the request content through to the mod_wsgi daemon process, while the original thread deals with the response. This is obviously going to be tricky to implement and I ran out of time while I was on holidays. Am back busy at my day job now and so haven't had a chance to pursue it further. I haven't even released a new version with all of what I did manage to get done when on holidays, which I should really do.
Graham > On 3 Mar 2018, at 2:57 am, Cristiano Coelho <[email protected]> wrote: > > Hi Graham, got any updates related to this? Have been trying to reach out AWS > to update their mod_wsgi versions but seems like an useless effort. > > > > El domingo, 10 de diciembre de 2017, 20:23:01 (UTC-3), Graham Dumpleton > escribió: > Anyway, am looking into something about how daemon mode works to see if I can > short circuit things to possibly partly avoid the problem. > > Will update later. > > Graham > >> On 11 Dec 2017, at 10:21 am, Cristiano Coelho <cristia...@ <>gmail.com >> <http://gmail.com/>> wrote: >> >> Sorry, I think it was a typo when I tried the commands, my tests were with >> just HTTP after all, and I see the same issue, if I use HTTPS the slowloris >> script just stops instantly. >> >> The logs from the main post were with HTTPS indeed but that's because the >> server uses HTTPS. The local test was done only with HTTP. >> >> >> El domingo, 10 de diciembre de 2017, 19:48:59 (UTC-3), Graham Dumpleton >> escribió: >> I will try and provide a better explanation of why solving it is hard later, >> but if I change: >> >> slowhttptest -c 6 -B -i 10 -r 200 -s 8192 -t POST -u >> "https://localhost:8080/test <https://localhost:8080/test>" -x 10 -p 3 >> >> to: >> >> slowhttptest -c 6 -B -i 10 -r 200 -s 8192 -t POST -u >> "http://localhost:8080/test <http://localhost:8080/test>" -x 10 -p 3 >> >> Ie., non HTTPS, since mod_wsgi-express is only accepting HTTP, then I don't >> see any immediate response being logged in the access log. >> >> mod_wsgi-express start-server app.py --port 8080 --body-timeout 62 >> --log-to-terminal --access-log >> >> Other than that, the behaviour I see is as I would expect. >> >> Graham >> >>> On 11 Dec 2017, at 5:06 am, Cristiano Coelho <cristia...@ <>gmail.com >>> <http://gmail.com/>> wrote: >>> >>> Update: Here's a small wsgi test script, tested with a fresh apache >>> mod_wsgi installation (through pip). >>> >>> The same issue can be easily replicated, and it seems that the only way to >>> improve it is with the request timeout values (header and body), which >>> sadly needs to be high when using AWS due to how the load balancer works >>> (keeping open connections to the apache server to improve loading time). >>> >>> The same issue happens with another server like gunicorn, which they >>> clearly state on their docs it's an issue that WILL happen unless the >>> reverse proxy (nginx) is properly set up. Now for Apache + mod_wsgi, I >>> would expect that apache is the reverse proxy (even if there's a load >>> balancer before it) and it should help with the issue just like nginx and >>> gunicorn, or even IIS + asp.net <http://asp.net/> >>> >>> >>> from flask import Flask, request, jsonify >>> >>> # pip install Flask >>> >>> # Testing flask >>> # export FLASK_APP=app.py >>> # flask run >>> >>> >>> # Testing mod_wsgi >>> # pip install mod_wsgi (and apache2 + apache2-dev before this if it's not >>> installed) >>> # Create user wsgi or change user >>> # sudo -u wsgi mod_wsgi-express start-server app.py --port 8080 >>> --body-timeout 62 >>> # Set --body-timeout to simulate AWS setup >>> >>> # Interesting settings >>> # --connect-timeout defaults to 15s >>> # --queue-timeout defaults to 30s >>> # --body-timeout defaults to 15s >>> >>> >>> # Test slowloris: >>> # apt-get install slowhttptest >>> # 6 or a value > configured worked threads*processes >>> # slowhttptest -c 6 -B -i 10 -r 200 -s 8192 -t POST -u >>> "https://localhost:8080/test <https://localhost:8080/test>" -x 10 -p 3 >>> # Note that GET also works in which case the request should be pretty much >>> ignored since it's an unsupported method >>> >>> >>> app = Flask(__name__) >>> application = app # For mod_wsgi >>> >>> >>> @app.route('/test', methods=['POST']) >>> def test(): >>> >>> data = request.get_json(silent=True) or request.form >>> >>> if not data: >>> r = jsonify({ >>> 'out': '', >>> 'err': 'No data provided' >>> }) >>> >>> r.status_code = 400 >>> >>> else: >>> r = jsonify({ >>> 'out': data, >>> 'err': None >>> }) >>> >>> r.status_code = 200 >>> >>> return r >>> >>> >>> >>> -- >>> 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 modwsgi+u...@ <>googlegroups.com <http://googlegroups.com/>. >>> To post to this group, send email to mod...@ <>googlegroups.com >>> <http://googlegroups.com/>. >>> Visit this group at https://groups.google.com/group/modwsgi >>> <https://groups.google.com/group/modwsgi>. >>> For more options, visit https://groups.google.com/d/optout >>> <https://groups.google.com/d/optout>. >> >> >> -- >> 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 >> <https://groups.google.com/group/modwsgi>. >> For more options, visit https://groups.google.com/d/optout >> <https://groups.google.com/d/optout>. > > > -- > 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] > <mailto:[email protected]>. > To post to this group, send email to [email protected] > <mailto:[email protected]>. > Visit this group at https://groups.google.com/group/modwsgi > <https://groups.google.com/group/modwsgi>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- 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.
