1,环境
os: ubuntu14.04 x64
python: 2.7.6
apache: 2.4
django: 1.8.7
mysql: 5.6
2,安装组件
django安装:sudo pip install Django==1.8.7
apache安装:sudo aptitude install apache2
mysql安装:sudo aptitude install mysql-server-5.6
wsgi安装: sudo aptitude install libapache2-mod-wsgi
python mysql库:sudo aptitude install python-mysqldb
3,创建一个django工程:
工程创建及DB配置详见各大django教程
4,创建工程里的wsgi文件
假设你创建的工程叫rush
那么在rush这个工程下可能会存在这些目录
manage.py rush rush_app static static_root templates
manage.py rush这两个目录是自动生成的
那么就在自动生成的rush目录里创建一个名为wsi_apache.py的文件
其代码如下:
import os
import sys
HERE_PATH_ABS = os.path.dirname(os.path.abspath(__file__))
sys.path.append('%s/../' % HERE_PATH_ABS)
os.environ['DJANGO_SETTINGS_MODULE'] = 'rush.settings'
#import django.core.handlers.wsgi below django1.6
#application = django.core.handlers.wsgi.WSGIHandler()
from django.core.wsgi import get_wsgi_application #upper django1.7
application = get_wsgi_application()
最后四行如注释所言,django版本低于1.6的开启上面两行,高于1.7的开启下面两行
5,配置apache
1,修改 /etc/apache2/apache2.conf
注释156行追加157行
153<Directory />
154 Options FollowSymLinks
155 AllowOverride None
156 #Require all denied
157 Allow from all
158 </Directory>
不这么干就访问不了站点
2,将工程拷贝到你喜欢的路径,比如将rush这个工程cp到/opt下
3,启动一个你喜欢的访问网站的端口号:
修改/etc/apache2/ports.conf
Listen 80
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
默认开启了80,你可以如上追加8080端口监听
4,创建站点
进入/etc/apache2/sites-available目录
新建一个文件名为rush.conf的文件
<VirtualHost *:8080>
#ServerName hello.djangoserver
DocumentRoot /opt/rush
<Directory /opt/rush>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/rush/rush/wsgi_apache.py
Alias /static /opt/rush/static
</VirtualHost>
如上创建一个站点,里面的路径根据实际情况修改
重要:
WSGIScriptAlias / /opt/rush/rush/wsgi_apache.py
这句话就是当访问站点接口时将路径是"/" 的请求转发给/opt/rush/rush/wsgi_apache.py,这个文件就是刚刚我们创建的
Alias /static /opt/rush/static
这句话是将静态文件的访问路径,django明确指出不建议用django来处理静态资源,所以使用apache来接管静态资源分发
配置完成后在/etc/apache2/sites-available目录下使用命令
sudo a2ensite mysite
sudo service apache2 reload
sudo service apache2 restart
就完事了
5,简单讲解
如上例子,当访问了某个接口,如http://127.0.0.1:8080/index,那么apache会把这个请求丢给/opt/rush/rush/wsgi_apache.py,假设你的index接口会返回一个html,而这个页面里面有个css文件如/static/css/page.css,那么浏览器再次请求这个css文件,而这个Alias /static /opt/rush/static就起作用了,apache把这个来自/static请求映射到/opt/rush/static下,不再走django来处理了,完成了整个页面访问