gpt4 book ai didi

python-3.x - 在没有 nginx 的情况下运行 Flask 应用程序

转载 作者:行者123 更新时间:2023-12-04 11:30:46 26 4
gpt4 key购买 nike

在没有 nginx 或其他 Web 服务器的情况下运行 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)

要求.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 服务器,因为它被问到这里
Are a WSGI server and HTTP server required to serve a Flask app?

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




https://stackoverflow.com/a/38982989/1839360

为什么会这样?

我要问的是为什么 uWSGI 服务器不能像 HTTP 处理一样好,所以我需要将 HTTP 服务器放在互联网和 uWSGI 之间。为什么传入的 HTTP 请求可以直接进入 uWSGI(它不在开发或 Debug模式下运行)。

最佳答案

要运行 Flask,您不需要 nginx,只需要一个您选择的网络服务器,但使用 nginx 会更轻松。如果您使用的是 Apache,您要考虑使用 WSGI .

我记得在 Flask 文档的某处读过 answer to "Are a WSGI server and HTTP server required to serve a Flask app?" 中的说明。作为

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.).



背后的主要思想是 split 层的架构原理简化调试并提高安全性,类似于拆分内容和结构的概念(HTML 和 CSS、UI 与 API):
  • 对于较低层,请参见例如https://en.wikipedia.org/wiki/Transport_layer
    拥有专用的 HTTP 服务器允许您在该级别上进行包过滤等。
  • WSGI 是网络服务器和网络框架之间的接口(interface)层。

  • 更新

    我见过客户端只运行一个 WSGI 服务器,集成了 HTTP 支持。使用额外的网络服务器和/或代理只是一种很好的做法,但恕我直言,并非绝对必要。

    引用
  • https://flask.palletsprojects.com/en/1.1.x/deploying/mod_wsgi/描述了flask 的Apache 方式
  • https://flask.palletsprojects.com/en/1.1.x/tutorial/deploy/详细说明生产环境应该是什么样子
  • Deploying Python web app (Flask) in Windows Server (IIS) using FastCGI
  • Debugging a Flask app running in Gunicorn
  • Flask at first run: Do not use the development server in a production environment
  • 关于python-3.x - 在没有 nginx 的情况下运行 Flask 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62169352/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com