您的位置:首页 > 运维架构 > Apache

用mod_wsgi在apache中使用django

2013-03-20 20:18 239 查看
利用 mod_wsgi和apache来部署django现在比较流行,也被认为是最好的方式。django框架,python,apache2这些(以及-dev)的安装配置都是基本的,这里就不说了。

mod_wsgi支持任何满足python wsgi接口的apache模块。你要做的第一件事情就是安装mod_wsgi,可以参考:https://code.google.com/p/modwsgi/wiki/InstallationInstructions

也许你在安装的过程中会出现一些问题,这是因为mod_wsgi依赖python和apache,而python和apache本身就比较复杂。例如提示:

Python.h: No such file or directory等错误,这是因为你的系统里面只有python的runtime package没有develop package。


如果是linux,可以通过sudo apt-get install pythonX.X-dev(X.X替换成python版本号)安装。有其他错误,可以参考:https://code.google.com/p/modwsgi/wiki/InstallationIssues

一旦你成功安装好wsgi模块,接下来需要将wsgi模块导入到apache中,在apache的http.conf文件中添加:LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so,然后重启apache,在apache的log中应该会看到:Apache/2.2.22
(Ubuntu) mod_wsgi/3.4 Python/2.7.3 configured -- resuming normal operations,这说明apache中wsgi模块成功启动。

WSGI是为python语言定义的web服务器和web应用程序或者框架之间的一种简单通用的接口,符合CGI标准。在这里WSGI就起到了一个apache与django中间件的作用。为了能通过apache访问到django应用,首先需要在apache的httpd.conf文件里面添加:

WSGIScriptAlias / /path/to/mysite/apache/django.wsgi


这一行代码的作用是将你的django服务映射到apache的某个URL中,上面就是根目录,后面的路径是django project中wsgi.py所在的路径。到目前位置,apache和mod_wsgi基本搞定,接下来需要写一个WSGI application,也就是编写你的wsgi.py文件,示例如下:

import os
import sys
from django.core.wsgi import get_wsgi_application
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
application = get_wsgi_application()
path = '/path/to/mysite'
if path not in sys.path:
sys.path.append(path)

上面的path就是你的django project所在目录。然后重启apache,在浏览器中输入http://localhost/+你在django中配置的URL就能看到你提供的django服务了。

但是django不支持静态文件,例如:css、js、image等,它会把这块工作扔给web服务器,这可以通过Alias命令来设置,举例说明:

Alias /templates/images/ /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/
Alias /templates/css/ /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/css/
<Directory /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images>
Order deny,allow
Allow from all
</Directory>
<Directory /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/css>
Order deny,allow
Allow from all
</Directory>
通过把上面的命令放在http.conf文件中,下面解释一下命令的含义,以images为例:
Alias /templates/images/ /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/

是将/home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/映射到/templates/imges/,这样,如果你在html文件里有这样的引用:src="/templates/images/logo.png",apache看到这个URL之后就会去/home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/中查找logo.png图片,css也是同样的道理。也就是说,django把通过URL查找静态文件的工作交给了apache,而apache要找到相应的静态文件,需要做一个类似上面的重命名(映射)。通过上面简单的配置就能是静态文件正常工作了。对于比较小的工程这样做没什么问题,如果工程比较大,关于django管理静态文件的方法可以参考:https://docs.djangoproject.com/en/dev/howto/static-files/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: