nginx - Web 服务器如何知道它必须将请求发送到应用程序服务器和静态文件?

标签 nginx flask webserver gunicorn appserver

我来自在 IIS 服务器上配置网站 (asp.net) 代码的背景。

我现在正在开发 Flask,但不清楚以下各项如何协同工作:Flask、WSGI、应用服务器和 Web 服务器。

Flask 只是 Python 应用程序。 Flask 使用 Werkzeug WSGI(Web 服务器网关接口(interface))。它知道如何处理 HTTP 协议(protocol)请求/响应。应用程序服务器可以是内置的开发服务器,也可以是其他服务器,例如gunicorn。 Web 服务器类似于 nginx。

我在 jinja 模板中使用了静态文件{{ url_for('static', filename='style.css') }}。应用程序服务器(如 Flask 开发服务器或 Gunicorn)可以处理此问题。但是nginx(Web服务器)如​​何解析静态文件地址呢?

此外,在下面的示例图中,当请求到达 Web 服务器(例如 nginx)时,它如何知道该请求必须转发到应用程序服务器(gunicorn)?例如,它可能是静态文件 url,也可能是端点 url。

enter image description here

最佳答案

因此,在您的示例中,您在 static 文件夹中有文件 style.css 。目前,静态文件由 Flask Web 服务器应用程序提供,而不是由 nginx 提供。问题是如何从 nginx 在 Flask 中提供静态文件?

  1. 首先,在 nginx 配置文件中为 webapp/static 创建一个位置 block
location /webapp {
  proxy_pass http://127.0.0.1:6969;
}

location /webapp/static {
  alias /path/to/webapp/static;
}
  • 并为每个 Web 应用设置 static_url_path:app = Flask(name, static_url_path="/webapp")
  • 关于nginx - Web 服务器如何知道它必须将请求发送到应用程序服务器和静态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68094275/

    相关文章:

    http - Go Web 服务器不处理 POST 请求

    docker - 为什么通过从容器中暴露 uwsgi 端口,nginx 会收到 502 BAD GATEWAY?

    java - 无法从Java中的nginx反向代理获取远程IP

    python - 从 cli 运行 Flask 应用程序给出 "no module named flaskr"

    python - flask 中的@app.errorhandler(Exception) 不会捕获无效路由

    java - 安卓服务

    nginx - 如何在 Dokku 中为每个应用程序设置 nginx 配置设置?

    proxy - Nginx 代理到本地磁盘或 S3 上的文件

    python - 无法以超过 125 RPS 的速度扩展 Gunicorn/Flask HelloWorld

    python - pymysql.err.OperationalError : (1045, "Access denied for user ' MYID' @'localhost' (using password: NO)")