首页 > Python > Apache+uwsgi+django基于目录配置站点
201302月18

Apache+uwsgi+django基于目录配置站点

写作背景

      最近基于django写了两个项目,以前一直用nginx+uwsgi来配置,可是公司的服务器上已经跑了apache,本着重复利用的原则,就改成了apache+uwsgi,下面就记录下配置的过程。
      服务器环境:是Fedora 17,apache使用yum直接安装,版本为2.2.22。

1、软件安装

      1.首先安装uwsgi相关的软件包
      yum install uwsgi,uwsgi-devel,uwsgi-plugin-common,uwsgi-plugin-python
      2.然后安装mod_uwsgi,因为软件源中没有,所以这里选择自己编译,先下载mod_uwsgi.c,使用Apache扩展工具apxs编译
      sudo apxs -i -a -c mod_uwsgi.c,
      这样就会在apache的modules目录中增加mod_wsgi.so
      3.在apache的配置文件httpd.conf中使用LoadModule指令在运行时刻将其加载到Apache服务器中
      LoadModule uwsgi_module modules/mod_uwsgi.so。
      这样apache+uwsgi就已经配置好了。

2、项目配置

      因为项目都是内部使用,没有很高的要求,所以使用一个uwsgi运行所有的站点,类似php的php-fpm方式,这样方便管理uwsgi进程,同时增加新的项目时,可以无需改变uwsgi(只需要修改apache配置)。
      1.uwsgi配置

#假设uwsgi目录为/var/www/html/uwsgi
#配置为uwsgi.ini
#日志名为uwsgi.log
#pid文件为uwsgi.pid
[uwsgi]
master		= true
processes	= 4 
daemonize	= /var/www/html/uwsgi/uwsgi.log
pidfile		= /var/www/html/uwsgi/uwsgi.pid 
plugins		= python
socket		= 127.0.0.1:8055

      2.apache配置

#假设项目一路径为/var/www/html/site1,virtualenv的路径为/var/www/html/pyenv1
#项目二路径为/var/www/html/site2,virtualenv的路径为/var/www/html/pyenv2
<Location /sites1>
    SetEnv UWSGI_PYHOME /var/www/html/pyenv1
    SetEnv UWSGI_CHDIR /var/www/html/site1
    SetEnv UWSGI_SCRIPT app.wsgi
    SetHandler uwsgi-handler
    uWSGIsocket 127.0.0.1:8055
</Location>
<Location /sites2>
    SetEnv UWSGI_PYHOME /var/www/html/pyenv2
    SetEnv UWSGI_CHDIR /var/www/html/site2
    SetEnv UWSGI_SCRIPT app.wsgi
    SetHandler uwsgi-handler
    uWSGIsocket 127.0.0.1:8055
</Location>
#我们可以让apache来处理static文件
Alias /site1/static /var/www/html/site1/static
<Location /site1/static>
SetHandler None
</Location>
Alias /site2/static /var/www/html/site2/static
<Location /site1/static>
SetHandler None
</Location>

      虽然配置基本完了,但是我们启动后就会发现只有第一个被访问的应用正常,这是因为django1.4默认生成的wsgi.py中没有根据每个请求重新设定DJANGO_SETTINGS_MODULE的值,需要做如下修改:

#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "siteX.settings")
os.environ["DJANGO_SETTINGS_MODULE"] = "siteX.settings"

      然后启动uwsgi,重启apache

#启动uwsgi
/usr/sbin/uwsgi --ini /var/www/html/uwsgi/uwsgi.ini
#重启apache
sudo systemctl restart httpd.service

      上面这些就是完整的配置了,但是在wsgi.py修改的地方还可以再考虑一下,或许也可以使用apache来指定特定的进程来运行特定的应用,或者可以尝试一下uwsgi的vhost。

文章作者: iitshare
本文地址:http://www.iitshare.com/apache-uwsgi-django-multi-sites.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

更多
本文目前尚无任何评论.

发表评论