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


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"; -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 [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