mod_wsgi
¶使用部署Django Apache 和 mod_wsgi 是一种尝试和测试的方式,以使姜戈进入生产。
mod_wsgi是一个Apache模块,可以承载任何python WSGI 应用程序,包括Django。Django将使用任何支持mod wsgi的Apache版本。
这个 official mod_wsgi documentation 是关于如何使用mod wsgi的所有详细信息的来源。你可能想从 installation and configuration documentation .
安装并激活med_wsgi后,编辑您的Apache服务器的 httpd.conf 文件并添加以下内容。
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
中的第一个位 WSGIScriptAlias
line is the base URL path you want to serve your application at (/
indicates the root url), and the second is the location of a "WSGI file" -- see below -- on your system, usually inside of your project package (`` mysite``在这个例子中)。这会告诉Apache使用该文件中定义的wsgi应用程序来服务给定URL下的任何请求。
如果您将项目的Python依赖项安装在 virtual environment
,使用添加路径 WSGIPythonHome
。请参阅 mod_wsgi virtual environment guide 了解更多详细信息。
这个 WSGIPythonPath
行确保您的项目包可以在python路径上导入;换句话说,就是 import mysite
作品。
这个 <Directory>
文章确保了Apache可以访问您的 wsgi.py
文件。
接下来我们要确保 wsgi.py
存在具有wsgi应用程序对象的。从Django 1.4版开始, startproject
将为您创建一个;否则,您需要创建它。见 WSGI overview documentation 对于默认的内容,您应该放在这个文件中,还有什么可以添加到文件中。
警告
如果多个Django站点在一个mod wsgi进程中运行,那么所有这些站点都将使用任何一个先运行的设置。这可以通过更改来解决:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
在里面 wsgi.py
,以:
os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"
或通过 using mod_wsgi daemon mode 并确保每个站点都在自己的守护进程中运行。
定影 UnicodeEncodeError
用于文件上载
如果你得到了一个 UnicodeEncodeError
上载或写入包含非ASCII字符的文件名或内容的文件时,请确保将Apache配置为支持UTF-8编码:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
放置此配置的常见位置是 /etc/apache2/envvars
.
或者,如果您是 using mod_wsgi daemon mode 您可以添加 lang
和 locale
选项添加到 WSGIDaemonProcess
指令:
WSGIDaemonProcess example.com lang='en_US.UTF-8' locale='en_US.UTF-8'
见 文件夹 有关详细信息,请参阅Unicode参考指南的部分。
mod_wsgi
守护进程模式¶“守护程序模式”是运行mod wsgi(在非Windows平台上)的推荐模式。要创建所需的守护进程组并委托要在其中运行的Django实例,需要添加适当的 WSGIDaemonProcess
和 WSGIProcessGroup
指令。如果使用守护进程模式,则需要对上述配置进行进一步更改,因为您不能使用 WSGIPythonPath
;相反,您应该使用 python-path
选择权 WSGIDaemonProcess
例如:
WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
WSGIProcessGroup example.com
如果要在子目录中为项目提供服务 (https://example.com/mysite
在这个例子中),您可以添加 WSGIScriptAlias
以上配置:
WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com
参见官方的mod wsgi文档 details on setting up daemon mode .
Django本身并不提供文件服务;它将这项工作留给您选择的任何Web服务器。
我们建议使用单独的Web服务器--即不同时运行Django的服务器--来提供媒体服务。以下是一些不错的选择:
但是,如果您没有选择,只能在同一个Apache上提供媒体文件 VirtualHost
作为django,您可以设置apache以将一些URL作为静态媒体,而其他则使用mod wsgi接口来提供给django。
这个例子在站点根目录下设置了django,但是 robots.txt
, favicon.ico
以及 /static/
和 /media/
作为静态文件的URL空间。所有其他URL将使用mod wsgi提供:
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico
Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/
<Directory /path/to/mysite.com/static>
Require all granted
</Directory>
<Directory /path/to/mysite.com/media>
Require all granted
</Directory>
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
什么时候 django.contrib.staticfiles
vt.在.中 INSTALLED_APPS
,Django开发服务器自动提供管理应用程序(以及任何其他安装的应用程序)的静态文件。但是,当您使用任何其他服务器配置时,情况并非如此。您负责设置ApacheWeb服务器或您正在使用的任何Web服务器来提供管理文件。
管理文件位于 (django/contrib/admin/static/admin Django发行版)。
我们 strongly 推荐使用 django.contrib.staticfiles
要处理管理文件(以及上一节中概述的Web服务器;这意味着使用 collectstatic
用于收集静态文件的管理命令 STATIC_ROOT
,然后配置您的Web服务器以提供 STATIC_ROOT
在… STATIC_URL
),但这里还有其他三种方法:
从文档根目录中创建指向管理静态文件的符号链接(这可能需要 +FollowSymLinks
在您的Apache配置中)。
使用一个 Alias
指令,如上所示,为适当的URL(可能 STATIC_URL
+ admin/
)到管理文件的实际位置。
复制管理静态文件,使其位于Apache文档根目录中。
Django提供了一个处理程序,允许Apache根据Django的身份验证后端直接对用户进行身份验证。见 mod_wsgi authentication documentation .
7月 22, 2024