python - Flask 的 Apache 配置文件

标签 python apache flask

在 Flask 的官方文档中,在配置 Apache 部分,它说创建一个站点可用文件,如下所示:

<VirtualHost *>
ServerName example.com

WSGIDaemonProcess yourapplication user=user1 group=group1 threads=5
WSGIScriptAlias / /var/www/yourapplication/yourapplication.wsgi

<Directory /var/www/yourapplication>
    WSGIProcessGroup yourapplication
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

它确实有效,但我不明白目录部分的用途。事实上,如果我从文件中删除它,网络应用程序就会继续工作。

有人可以解释一下这个配置的每个部分的作用吗?

最佳答案

删除 Directory 会产生三种后果部分。

  • 首先,根据权利,您的 Apache 服务器应该拒绝接受 WSGI 应用程序的请求。这是因为您删除了 Allow from all指令告诉 Apache 允许访问 WSGI 脚本。它没有失败表明您的 Apache 服务器的安全配置不严格,默认情况下允许访问文件系统的任何部分,这被认为是不好的做法,因为它会影响整个 Apache 实例的安全性。

  • 第二个是您的 WSGI 应用程序不会在由 mod_wsgi 创建并由 WSGIDaemonProcess 设置的单独守护进程中运行。指示。这是删除 WSGIProcessGroup 的结果。这是一个坏主意,因为这意味着您的 WSGI 应用程序以嵌入式模式运行,这意味着它在 Apache 子进程中运行。这被认为是一个坏主意,因为默认的 Apache 配置及其管理进程/线程的方式是针对静态文件托管和 PHP 的。这种配置对于 Python Web 应用程序来说非常糟糕,因此使用 mod_wsgi 托管的 Web 应用程序可能会表现不佳,具体取决于它正在做什么以及您获得的流量。守护进程模式是推荐模式,因为您可以更好地自定义它,因此它最适合您的特定 WSGI 应用程序。

  • 第三个是您的 WSGI 应用程序将在子解释器中运行,而不是在每个进程的主 Python 解释器上下文中运行。这是删除 WSGIApplicationGroup %{GLOBAL} 的结果。在子解释器上下文中运行可能会很糟糕,因为 Python 的各种第三方 C 扩展模块无法在子解释器上下文中正常运行。因此,最佳实践是强制使用主解释器上下文,但要做到这一点,您还需要让 WSGI 应用程序在其自己的守护进程进程组中运行,如 WSGIDaemonProcess 设置的那样。和WSGIProcessGroup .

关于python - Flask 的 Apache 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40295615/

相关文章:

python - Jinja 在 HTML 中呈现文本并保留换行符

javascript - 使用 Flask 在 html 中引用 .js 文件的静态资源问题

python - 从 ClinicalTrials.gov 抓取数据

python - 有些东西耗尽了大部分 GPU 内存,无法让我使用 Tensorflow 训练模型

python - 是否可以控制 matplotlib 标记方向?

apache - htaccess 递归是如何工作的?

php - 如何为codeigniter项目完美设置虚拟主机?

python - 以科学计数法将带有科学计数法的文本文件读取到 Pandas 数据框

apache - `md5sum -c` 获得 't work with Apache' s MD5 文件格式

flask - 劳斯/ flask : How to login via Twitter?