Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask的Apache配置文件_Python_Apache_Flask - Fatal编程技术网

Python Flask的Apache配置文件

Python Flask的Apache配置文件,python,apache,flask,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/your

在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>

ServerName example.com
WSGIDaemonProcess yourapplication用户=用户1组=组1线程=5
WSGIScriptAlias//var/www/yourapplication/yourapplication.wsgi
WSGIProcessGroup应用程序
WSGIApplicationGroup%{GLOBAL}
命令拒绝,允许
通融

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


有人能解释一下这个配置的每个部分都做了什么吗?

这个配置文件是为
mod\u wsgi
包设计的,它实现了一个简单易用的Apache模块,可以承载任何支持Python wsgi规范的Python web应用程序

来自mod_wgsi存档wiki:

    • WSGIApplicationProcess

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

    • WSGIApplicationGroup

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

  • 这说明了
    顺序
    允许
    部分:


  • 删除
    目录
    部分有三个后果

    • 首先,根据权限,您的Apache服务器应该拒绝接受WSGI应用程序的请求。这是因为您已经从所有指令中删除了
      Allow,该指令告诉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
      所设置的那样


    我已经读过维基了。这对我理解任何事情都没有帮助!这回答了我所有的疑问!还有一个问题:如果apache配置默认允许访问文件系统的任何部分,那么如果我尝试转到(我们使用Allow from all设置的目录),为什么会出现404错误?为了更好地理解,我一直在做一些测试。。。通过删除WSGIProcessGroup行,在我看来,该进程仍然由WSGIDaemonProcess行中设置的用户执行。。。。这真的令人困惑,因为他首先有一个从URL到文件系统的映射层。因此,整个文件系统在概念上可能是Apache根据观察到的访问控制提供的,但它仍然至少受到保护,因为没有设置从特定URL到文件系统的URL映射。因此,您所拥有的并不好,但确实意味着Apache配置中的一个东西会允许URL以某种方式映射到文件系统的敏感部分,然后会暴露您,因为访问控制已被禁用。您在
    WSGIDaemonProcess
    指令中使用的用户是什么。当所有Apache进程都以该用户的身份运行时,将
    user
    group
    设置为Apache用户是一个常见的错误。您应该使用的检查记录在