Flask + uWSGI 设置的“来自服务器的空回复”

iva*_*ncz 8 python wsgi flask uwsgi

我正在开始使用 WSGI,直到现在,在一些教程的帮助下,我正在对 Flask 进行一些测试,前面有 uWSGI,因为 Flask 不是生产环境的好选择(不能扩展)好吧,默认情况下,它每次回答一个请求 - http://flask.pocoo.org/docs/0.12/deploying/)并且 uWSGI 提供了灵活性和更高的可靠性,产生了工作人员和进程。我错了吗?

我之前看到的大多数教程都指向在 WSGI 前面使用 Nginx 进行设置,但这真的有必要吗?我想要做的只是提供一种可扩展的方式来向我的 Flask 应用程序发送请求,具有更高的性能和可扩展性。

所以我有这个基本设置:

你好.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
Run Code Online (Sandbox Code Playgroud)

wsgi.py

from hello import app

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

运行uWSGI:

uwsgi --socket 0.0.0.0:8080 --plugin python --wsgi-file wsgi.py --callable app --master --processes 4 --threads 2 &
Run Code Online (Sandbox Code Playgroud)

当我对环回地址执行 curl 时,我收到一个空回复..

curl http://127.0.0.1:8080
invalid request block size: 21573 (max 4096)...skip
curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)

原谅我,但我看不到我错过了什么。这里有没有人在 WSGI 方面更有经验,可以指出这个设置的失败在哪里?任何帮助都会让我非常感激。

参考文档: https ://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04 http://uwsgi-docs。 readthedocs.io/en/latest/WSGIquickstart.html

Pio*_*iuk 8

socket当您将 uwsgi 与 Web 服务器(例如 nginx)结合使用时,应使用您的选项。否则你应该使用http,所以

uwsgi --http 0.0.0.0:8080 --plugin python --wsgi-file wsgi.py --callable app --master --processes 4 --threads 2
Run Code Online (Sandbox Code Playgroud)

将工作。

生产环境(不能很好地扩展,默认情况下,它每次回答一个请求 - http://flask.pocoo.org/docs/0.12/deploying/)和 uWSGI 提供了灵活性和更高的可靠性,产生了工作人员和流程。我错了吗?

你是对的。

我之前看到的大多数教程都指向在 WSGI 前面使用 Nginx 进行设置,但这真的有必要吗?我想要做的只是提供一种可扩展的方式来向我的 Flask 应用程序发送请求,具有更高的性能和可扩展性。

嗯,nginx 被设计在前面并且拥有它比只有应用程序服务器(uwsgi)好得多。专业化,这是关键。让您的应用服务器专注于业务处理和 Python。

  • 是的!我在这里询问后做了一些测试,我意识到由于选项套接字,我无法直接通过浏览器访问应用程序,而没有网络服务器访问套接字然后进行工作。感谢您的完整回答,Piotr :)! (2认同)