根据官方 uWSGI 文档:Web 服务器面向外部世界。它可以直接从文件系统提供文件(HTML、图像、CSS 等)。但是,它不能直接与 Django 应用程序对话;它需要某种东西来运行应用程序,向其提供来自 Web 客户端(例如浏览器)的请求并返回响应。
Web 服务器网关接口 - WSGI - 负责这项工作。WSGI 是 Python 标准。uWSGI 是 WSGI 的实现。
这是否意味着如果我想在 Web 服务器上部署 Django 应用程序,uWSGI 是必须的?
答案1
简短的回答:是的,你需要某种形式的单独的 django 服务器。
长答案:nginx 本身只能提供静态文件。它可以读取服务器上的任何文件并通过 HTTP 发送出去,但仅此而已。它本身不会说 PHP、Python、Java 等。如果您将 nginx 指向一个 python 文件,它只会将其视为文本文件并显示源代码,因为它不知道还能用它做什么。
动态网站的工作原理如下:
- 请求到达 Web 服务器
- Web 服务器将请求转发到 PHP/Python/etc 应用服务器
- 应用服务器根据请求生成 HTML
- 应用服务器将 HTML 发送到 Web 服务器
- Web 服务器提供 HTML
要使第 2 点发挥作用,您需要“教导” nginx 以不同的方式处理某些文件/URL。您基本上告诉它所有以 .php 结尾的内容都应转发到 php 服务器。对于 django 应用也是如此。您需要告诉 nginx 将某些 URL 模式转发到 django 服务器,然后该服务器运行 python 脚本来生成 HTML。
uWSGI 是一个 Django 服务器,但有多个。