Windows环境下,将Django部署到Apache Web Server

在Windows上部署Django(用mod_wsgi)会出现各种奇怪的问题,现简单记录下配置过程及遇到的错误及解决方法。

环境搭建                                                   

windows 7

python 2.7.3 (注意最好是32位的,因为Apache目前对64位支持非常不友善,尝试了好多次,64位的太高大上,众多不兼容)

Apache2.2.10 (直接下载apache_2.2.10-win32-x86-no_ssl.msi就行)

Django-1.6.1 (官网下载)

配置思路                                                   

1、配置apache的httpd.conf文件

2、配置django相关配置文件

配置过程     

其实配置生效针对不同的环境有不同的细节需要处理,网上的方案(包括本篇)都不是一定通用的,只是在某种环境下有效,但总体思路就是配置上述提及的两个配置文件。

部署django项目常用的两个方式是使用mod_python和mod_wsgi两种部署方式,这里我使用的是mod_wsgi。

1、先去网上下载个名叫这个的东西:mod_wsgi-3.4.ap22.win32-py2.7,里面有个文件是mod_wsgi.so,然后把这个copy到apache安装目录的modules文件下(默认安装目录是:C:\Program Files (x86)\Apache Software Foundation\Apache2.2\modules)

下面两个配置中涉及路径的很容易搞错,如果是绝对路径的话要检查自己是否正确。

2、在Django项目根目录下新建两个文件:

django.wsgi:

1
2
3
4
5
6
7
8
9
10
11
<span style="font-size: 14px;">#coding=utf-8
 
import os
import sys
import django.core.handlers.wsgi
 
os.environ['DJANGO_SETTINGS_MODULE'] = 'appops.settings'
app_apth = "D:/OPSAPP/appops"
sys.path.append(app_apth)
application = django.core.handlers.wsgi.WSGIHandler()
</span>

apache_django_wsgi.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<span style="font-size: 14px;">#Alias / D:/OPSAPP/appops
Alias /favicon.jpg D:/OPSAPP/appops/static/images/favicon.jpg
 
#WSGIScriptAlias /api "D:/OPSAPP/appops/appapi/handler.py"  #注意,这里在httpd.conf中写过的话这里就不用写了。
WSGIScriptAlias / "D:/OPSAPP/django.wsgi"
 
WSGIPassAuthorization On
 
<Directory "D:/OPSAPP/appops/appops">
Order Deny,Allow
Allow from all
</Directory>
 
Alias /static/ D:/OPSAPP/appops/static/
 
<Directory  D:/OPSAPP/appops/static/ >
Order deny,allow
Allow from all
IndexOptions FancyIndexing
</Directory>
 
<Directory  D:/OPSAPP/appops/ >
Order deny,allow
Allow from all
IndexOptions FancyIndexing
</Directory>
 
<Directory "D:/OPSAPP">
Allow from all
</Directory>
</span>

目录结构如下:

 

3、编辑apache的配置文件httpd.conf(C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf)

中间加上一句:

LoadModule wsgi_module modules/mod_wsgi.so

文件结尾新增下列配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<span style="font-size: 14px;">Alias /static D:/OPSAPP/appops/static     #这是为了可以通过url来访问static文件
<Location "/static/">
       SetHandler None
</Location></span><br><span style="font-size: 14px;">
 
<VirtualHost *:80>                       #配置虚拟目录
ServerName app.ops.test.com
#ServerName 192.168.18.74
 
DocumentRoot D:/OPSAPP
WSGIScriptAlias / D:/OPSAPP/django.wsgi
 
<Directory />
Order deny,allow
Allow from all
</Directory>
<Directory /apache>
Allow from all
</Directory>
</VirtualHost>
 
 
<Directory "D:/OPSAPP/appops/static/">    #这个一定需要,不然网页样式错误,css没有起作用
Order Deny,Allow
Allow from all
</Directory>
</span>

重启下apache服务基本就OK了。

常见错误                                                     

访问失败时的错误会记录在apache日志里(C:\Program Files (x86)\Apache Software Foundation\Apache2.2\logs),

1、静态资源不能访问,如css样式错乱等,需要在httpd.conf文件里增加配置:

1
2
3
4
5
6
<span style="font-size: 14px;"><Directory  D:/OPSAPP/appops/static/ >
Order deny,allow
Allow from all
IndexOptions FancyIndexing
</Directory>
</span>

2、出现找不到模块的错,如no module named XXX等,主要有两个原因:

1)、路径错了

2)、文件命名跟Django或python内部模块冲突了

参考:

http://www.cnblogs.com/zhengyun_ustc/archive/2006/11/20/django_apache_win32.html

http://www.server110.com/apache/201309/1873.html

 
 
 
标签: PythonDjango

Django部署到Apache Web Server的更多相关文章

  1. Windows环境下,将Django部署到Apache Web Server

    在Windows上部署Django(用mod_wsgi)会出现各种奇怪的问题,现简单记录下配置过程及遇到的错误及解决方法. 环境搭建                                   ...

  2. Using Apache Web Server with Jboss AS 7

    In real-world projects, it's common to find Apache web server as a front door to your application se ...

  3. 解决Apache Web Server的几个错误

    一.安装好Apache后服务里没有Apache服务 在命令行进入安装apache的bin目录下,输入命令 httpd.exe -k install -n Apache2.4 二.Apache web ...

  4. yum安装Apache Web Server后各个文件存放位置

    yum安装Apache Web Server后各个文件存放位置   用yum安装apache软件: yum -y install httpd 安装完成后,来查看理解yum安装软件的过程和安装路径.   ...

  5. django部署到apache上(非常重要的,3者版本要一致,是32位就都要是32位的)

    网上把django部署到apache的文章挺多的,但是按照大家的操作,并没有一次就成功,还是遇到了一些问题,这里主要有以下几个情况. 1.网上找到的mod_wsgi的版本问题,导致动态库加载不上. 2 ...

  6. django 部署到 apache

    安装完django之后,每次都需要通过命令来启动启动开发服务器.虽然调试和测试方便,但只能在本地运行,并且不能承受许多用户同时使用的负载.所以需要将Django部署到生产级的服务器,这里选择apach ...

  7. kill 挂起 Apache Web Server

    [root@hadoop1 ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8 ...

  8. 如何将Django部署到Apache服务器上

    操作环境: Ubuntu 16.04 Apache 2.4 Django 1.9 Python 2.7 mod_wsgi  前言:本教程纯自己查阅资料后整理,望对大家有帮助! 1. 安装 mod_ws ...

  9. 禁掉Apache web server签名 How to turn off server signature on Apache web server

    有的时候,我们为了从安全角度考虑,防止黑客恶意攻击.我们会隐藏掉server信息,比方,一般我们会发现例如以下信息. 我用的是centos (fedora, RHEL也一样) $ sudo vi /e ...

随机推荐

  1. TinyMCE实现简单的本地上传

    TinyMCE这个东西很多地方再用,不过我以前一直没用过,最近才接触,因为有一套现成的metro风格的皮肤,仅此而已,不过最终如何调用还是我得来实现.其他的都好说,网上的资料一大把一大把的,唯独这个本 ...

  2. java 7K交通灯管理系统面试题

    交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆.    比如:    由南向而来去往北向的车辆----直行车辆    由西向而来去往 ...

  3. (两)unity4.6Ugui中国教程文档-------总结-UGUI Canvas

    大家好,我是广东太阳.   转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unitym ...

  4. myEclipse Debug

    ========================================== myEclipse Debug     快捷键 ================================= ...

  5. C#/.NET code

    Some practices to write better C#/.NET code(译) C#(.NET)中有关编码的一些建议,原文地址:http://www.codeproject.com/Ar ...

  6. Android有效的治疗方法Bitmap,减少内存

    Android有效的治疗方法Bitmap,减少内存 照片可能有不同的大小. 在很多情况下,大小.比如,我们的Camera应用,我们所拍的照片的大小远大于屏幕显示的大小 假如你的应用被限制了内存使用,显 ...

  7. Sql数据类型转换

     一.ASCII码值与字符间转换 1.ASCII()与CHAR()       ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用''括起来,但含其 ...

  8. c/cpp中怎样切割字符串,相似于split的功能

    在python中,假设要求当前时间的unix时间戳,我特别喜欢这么用: import time timestr = time.time() timestamp = int(timestr.split( ...

  9. 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询

    这里举样例用的是:部门与员工的关系. 一个部门能够相应多个员工,这就是非常明显的多对一关联关系. 我们须要建立两个实体类:员工(Employee).部门(Department) 员工类:Employe ...

  10. js 上一天、下一天

    function Previousday() { var curDate = new Date(CreateDate_Temp); * * * ); var strDate = preDate.get ...