Flask的Apache配置文件

时间:2016-10-27 23:14:08

标签: 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>

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

有人可以解释一下这个配置的每个部分是做什么的吗?

2 个答案:

答案 0 :(得分:1)

删除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扩展模块将无法在子解释器上下文中正常运行。因此,最佳做法是强制使用主解释器上下文,但要做到这一点,您还需要在WSGIDaemonProcessWSGIProcessGroup设置的自己的守护程序进程组中运行WSGI应用程序。 / p>

答案 1 :(得分:0)

配置文件用于mod_wsgi包,它实现了一个简单易用的Apache模块,该模块可以托管任何支持Python WSGI规范的Python Web应用程序。

来自mod_wgsi归档的wiki:

  1. mod_wgsi Configuration Directives

    • WSGIApplicationProcess

        

      WSGIProcessGroup指令可用于指定将在哪个进程组中执行WSGI应用程序或WSGI应用程序集。同一进程组中的所有WSGI应用程序都将在同一组守护程序进程的上下文中执行。

    • WSGIApplicationGroup

        

      WSGIApplicationGroup指令可用于指定WSGI应用程序或WSGI应用程序集所属的应用程序组。同一应用程序组中的所有WSGI应用程序都将在处理请求的进程的同一Python子解释器的上下文中执行。

  2. 这解释了OrderAllow部分: mod_wgsi Access Control Mechanisms