配置Django生产环境(Apache + mod_wsgi)

以下是在CentOS7_x86_64平台上的配置过程,其它平台类似。这里的Python版本是2.7.5,Django是1.7.1。

为方便描述,假设待部署的Django工程为"/home/XXXX",其目录结构如下所示:

安装mod_wsgi

yum install mod_wsgi

配置Apache(httpd)

· 加载mod_wsgi.so:

1
LoadModule wsgi_module modules/mod_wsgi.so

· 告诉Apache哪些URL需要交由哪个WSGI应用来处理,在Apache配置文件中添加:

1
WSGIScriptAlias / /home/XXXX/XXXX/wsgi.py

对根URL的请求将转向"/home/XXXX/XXXX"目录下的WSGI应用来处理。


· 指出工程(包)的本地路径,在Apache配置文件中添加:

1
WSGIPythonPath /home/XXXX

这条指令能确保当出现"import XXXX"时,Apache不会找不到路径。


· 添加如下指令,用以确保Apache能够访问到"wsgi.py"文件:

若Apache的版本 \< 2.4

1
2
3
4
5
6
<Directory /home/XXXX/XXXX>
    <Files wsgi.py>
        Order allow,deny
        Allow from all
    </Files>
</Directory>

若Apache的版本 >= 2.4

1
2
3
4
5
<Directory /home/XXXX/XXXX>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

· 指定静态文件目录:

假设已将XXXX工程的STATIC_ROOT配置为'/data/static/',MEDIA_ROOT配置为'/data/media/'

1
Alias /static/ /data/static/

若Apache的版本 \< 2.4

1
2
3
4
<Directory /data/static>
    Order allow,deny
    allow from all
</Directory>

若Apache的版本 >= 2.4

1
2
3
4
5
<Directory /data/static>
    Require all granted
</Directory>

Alias /media/ /data/media/

若Apache的版本 \< 2.4

1
2
3
4
<Directory /data/media>
    Order allow,deny
    allow from all
</Directory>

若Apache的版本 >= 2.4

1
2
3
<Directory /data/media>
    Require all granted
</Directory>

重启Apache(httpd)

systemctl restart httpd


更详细的配置见官方文档:How to use Django with Apache and mod_wsgi