运行 没有 nginx 的 Flask 应用程序

Running Flask application without nginx

运行 没有 nginx 或其他网络服务器的 Flask 应用程序?

uWSGI可以同时作为web服务器和应用服务器吗?

例如,独立的 WSGI 容器 https://flask.palletsprojects.com/en/1.1.x/deploying/wsgi-standalone/ 但同样,它建议使用 HTTP 服务器。为什么? uWSGI 不能处理 HTTP 请求吗?

我阅读了有关部署 Flask 应用程序的不同文章。他们说,我需要 uWSGI 和 nginx——一个流行的选择。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

https://flask.palletsprojects.com/en/1.1.x/deploying/uwsgi/#uwsgi

我的 Flask 应用程序。 app_service.py

import json
import os

from flask import Flask, Response, redirect


portToUse = 9401


@app.route("/app/people")
def get_service_people():
    print("Get people")
    people_str = "{ \"John\", \"Alex\" }"
    return Response(people_str, mimetype="application/json;charset=UTF-8")


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=portToUse)

uwsgi 配置uwsgi.ini

[uwsgi]
chdir = $(APPDIR)
wsgi-file = app_service.py
callable = app
uid = psc-user
gid = psc-user
master = true

processes = 1
threads = 1
http-timeout = 300
socket-timeout = 300
harakiri = 300

http = 0.0.0.0:9401
socket = /tmp/uwsgi.socket
chmod-sock = 664
vacuum = true
die-on-term = true

; Images serving: https://github.com/unbit/uwsgi/issues/1126#issuecomment-166687767
wsgi-disable-file-wrapper = true

log-date = %%Y-%%m-%%d %%H:%%M:%%S
logformat-strftime = true
logformat = %(ftime) | uWSGI    | %(addr) (%(proto) %(status)) | %(method) %(uri) | %(pid):%(wid) | Returned %(size) bytes in %(msecs) ms to %(uagent)

requirements.txt

# Web framework for python app.
Flask==1.1.1

# JWT tocket utils to retrieve the tocken from HTTP request header.
# It is used for retrieving optional permissions from gateway.
# https://pypi.org/project/PyJWT/
PyJWT==1.7.1

# Eureka API client library to implement service discovery pattern
py_eureka_client==0.7.4

# Python application server
uWSGI==2.0.18

它似乎在起作用。我 运行 在 docker-compose.

的虚拟机中完成所有这些操作

我的问题,为什么这里需要 nginx? python 开发人员是否在没有 Web 服务器的情况下使用 uWSGI?

更新

我不会 运行 在生产环境中开发默认的 WSGI 服务器,正如这里所要求的那样

WSGI servers happen to have HTTP servers but they will not be as good as a dedicated production HTTP server (Nginx, Apache, etc.)

来自

为什么会这样?

我要问的是为什么 uWSGI 服务器不能很好地处理 HTTP,所以我需要将 HTTP 服务器放在互联网和 uWSGI 之间。为什么传入的 HTTP 请求可以直接转到 uWSGI(在开发或调试模式下不是 运行ning)。

对于 运行 flask,你不需要 nginx,只需要一个你选择的网络服务器,但使用 nginx 会更容易。如果您使用的是 Apache,您要考虑使用 WSGI.

我记得在 Flask 文档的某个地方读过 as

The answer is similar for "should I use a web server". WSGI servers happen to have HTTP servers but they will not be as good as a dedicated production HTTP server (Nginx, Apache, etc.).

背后的主要思想是拆分层的架构原则,以简化调试并提高安全性,类似于拆分内容和结构的概念(HTML & CSS、UI 与 API):

更新

我只看到客户端 运行 单独的 WSGI 服务器,具有集成的 HTTP 支持。使用额外的网络服务器和/或代理只是一种很好的做法,但恕我直言,这并不是绝对必要的。

参考资料