Python Flask的Apache配置文件
在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
<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
的结果。这是一个坏主意,因为这意味着您的WSGI应用程序在嵌入式模式下运行,这意味着它在Apache子进程中运行。这被认为是一个坏主意,因为默认的Apache配置以及它如何管理进程/线程是针对静态文件托管和PHP的。这种配置对于Python web应用程序来说非常糟糕,因此,使用mod_wsgi托管的web应用程序的性能可能会很差,这取决于它正在做什么以及您获得的流量。守护程序模式是推荐的模式,因为您可以更好地自定义它,以便它最适合您的特定WSGI应用程序WSGIProcessGroup
- 第三个是WSGI应用程序将在子解释器中运行,而不是在每个进程的主Python解释器上下文中运行。这是删除
的结果。在子解释器上下文中运行可能不好,因为Python的各种第三方C扩展模块无法在子解释器上下文中正常运行。因此,最佳实践是强制使用主解释器上下文,但要做到这一点,还需要让WSGI应用程序在其自己的守护进程组中运行,正如WSGIApplicationGroup%{GLOBAL}
和WSGIDaemonProcess
所设置的那样WSGIProcessGroup
WSGIDaemonProcess
指令中使用的用户是什么。当所有Apache进程都以该用户的身份运行时,将user
和group
设置为Apache用户是一个常见的错误。您应该使用的检查记录在