apache部署django

本文详细介绍了如何在Windows Server 2003环境下,将Python Django项目部署到Apache服务器,包括安装必要组件、配置Apache和mod_wsgi模块、创建WSGI文件以及调整项目配置等步骤。

环境:win server 2003

版本:apache2.2   django1.3  python2.7 mod_wsgi.so

首先 安装apache2.2 python2.7 django1.3 

然后下载 mod_wsgi.so (网上很多文章都是mod_python,但只支持到python2.5,现在停止更新了,所以我直接就用mod_wsgi)

把mod_wsgi.so拷贝到 apache目录下的  modules 下。

打开 httpd.conf文件:

更改Apache的httpd.conf(C:\Program Files\Apache Software Foundation\Apache2.2\conf目录下)配置文件:

  (1)在配置文件中LoadModule的那一段,添加一行如下:

    LoadModule wsgi_module modules/mod_wsgi.so

  (2)然后再添加一行如下:

    WSGIScriptAlias / "D:/WorkSpace/DjangoProject/FirstProject/django.wsgi"

  注意上面的目录D:/WorkSpace/DjangoProject/FirstProject,这个就是您的工程的目录,需要根据的实际情况做修改,WSGIScriptAlias 有两个参数:(1)斜杠 / 表示访问路径为 “ / ” ,如:http://127.0.0.1:8080/,即根路径。

后面的django.wsgi这个文件是需要新建的,一般和项目放在一起,后面我再来说这个如何新建这个文件。

  (3)找到Directory的配置区域,添加如下的一段配置

    <Directory "D:/WorkSpace/DjangoProject/FirstProject">
      Order Deny,Allow
      Allow from all
    </Directory>

  注意,上面的目录,这个同上面的一样,是您的工程的目录,根据您的实际情况做修改。

新建一个wsgi文件:

    在工程的目录下新建一个django.wsgi,用记事本打开,输入以下的内容并保存: 

      import os
      import sys

      import django.core.handlers.wsgi

      sys.path.append(r'D:/WorkSpace/DjangoProject')
      os.environ['DJANGO_SETTINGS_MODULE'] = 'FirstProject.settings'
      application = django.core.handlers.wsgi.WSGIHandler()

    解释一下第4、5两行:

    第四行中的 D:/WorkSpace/DjangoProject 是您的工程目录D:/WorkSpace/DjangoProject/FirstProject 的上一层目录。根据您工程的目录情况做修改。

    第五行 os.environ['DJANGO_SETTINGS_MODULE'] = 'FirstProject.settings' ,这个FirstProject.settings就是指您的工程目录下的setting文件,根据您的工程目录名称的不同需要做修改。

    最后,这个django.wsgi文件名可以随便取,例如test.wsgi、app.wsgi等等,但是一定要与(2) 中的那行配置保持一致。如果您这里新建的文件名不是django.wsgi而是test.wsgi,那么(2) 中的那行配置就应该修改为:WSGIScriptAlias / "D:/WorkSpace/DjangoProject/FirstProject/django.wsgi"。

修改项目的setting.py文件:

  找到您工程目录下的setting.py,对于我这里就是D:\WorkSpace\DjangoProject\FirstProject\setting.py。

  修改为如下:

MEDIA_ROOT = 'D:/WorkSpace/DjangoProject/FirstProject'
STATIC_ROOT = 'D:/WorkSpace/DjangoProject/FirstProject'
TEMPLATE_DIRS =
                                   (

                                    "D:/WorkSpace/DjangoProject/FirstProject/templates",

                                   )

还有一处需要注意,就是ROOT_URLCONF这个设置,urls前面得名称需要跟你发布的目录名称一致。比如我这个就是FirstProject.ROOT_URLCONF = 'FirstProject.urls'


<think>我们正在处理用户关于在Windows系统上使用Apache部署Django项目时遇到网页无法访问的问题。根据提供的引用,我们可以知道部署过程中常见的问题包括mod_wsgi安装、虚拟环境中的Python路径以及Django的wsgi.py路径配置问题。此外,引用[4]中提到了一个具体的错误,即Apache在加载mod_wsgi模块时出现语法错误,提示找不到指定的模块。根据用户的问题,我们需要逐步排查以下几个方面:1.检查Apache的配置文件(httpd.conf)是否正确,特别是加载mod_wsgi的配置。2.检查mod_wsgi是否与当前系统的Python版本和Apache版本兼容。3.检查Django项目的wsgi.py文件配置是否正确,以及项目路径设置。4.检查Apache的错误日志以获取更详细的错误信息。下面我们将详细说明每个步骤。###步骤1:检查Apache配置文件(httpd.conf)在Apache的配置文件httpd.conf中,需要正确配置mod_wsgi模块。根据引用[4]中的错误信息,错误发生在加载mod_wsgi模块时。错误提示为“Cannotload ...mod_wsgi.cp36-win_amd64.pyd”,这通常意味着: -指定的mod_wsgi模块文件路径不正确。 -mod_wsgi模块与当前安装的Python版本或Apache版本不匹配。在httpd.conf中,加载mod_wsgi的配置行类似于:``` LoadModule wsgi_module"c:/users/administrator/appdata/local/programs/python/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd" ```请确保:-路径中的Python版本(这里是python36)与实际使用的Python版本一致。-该文件确实存在于指定的路径中。如果文件不存在,可能需要重新安装mod_wsgi。安装mod_wsgi时,必须确保使用与ApachePython完全匹配的版本。可以通过以下命令安装:``` pipinstall mod_wsgi```安装后,使用以下命令获取正确的LoadModule配置行:``` mod_wsgi-express module-config```然后将该命令的输出复制到httpd.conf中。 ###步骤2:检查mod_wsgi的兼容性确保安装的mod_wsgi版本与Apache版本和Python版本兼容。特别是,在Windows上,mod_wsgi的二进制文件需要针对特定版本的ApachePython进行编译。如果版本不匹配,可能会导致加载失败。建议参考mod_wsgi官方文档或预编译的二进制文件(如果有)来获取匹配的版本。###步骤3:配置Django项目的wsgi.py和Apache虚拟主机在Apache配置中,需要设置Django项目的WSGI应用程序。通常,在httpd.conf或额外的虚拟主机配置文件中,需要添加如下配置: ```<VirtualHost *:80>ServerNamelocalhostWSGIScriptAlias /"E:/path/to/your/project/wsgi.py"<Directory "E:/path/to/your/project"><Fileswsgi.py>Require allgranted</Files></Directory></VirtualHost> ```请确保:- `WSGIScriptAlias`指向的项目中的wsgi.py文件路径正确。-项目目录的权限设置正确(使用`<Directory>`指令允许访问)。同时,检查wsgi.py文件,确保它正确设置了Django的环境变量。通常,wsgi.py文件内容如下:```pythonimportosfrom django.core.wsgiimport get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') application= get_wsgi_application()```注意:`your_project.settings`应替换为你的项目设置模块的实际路径。###步骤4:检查Apache错误日志Apache的错误日志通常位于Apache安装目录下的logs/error.log。查看该日志文件,可以获取更详细的错误信息,帮助我们定位问题。例如,引用[4]中的错误信息就是来自Apache的错误日志。根据错误日志,我们可以有针对性地解决。 ###其他常见问题- **虚拟环境路径**:如果项目使用了虚拟环境,需要确保在wsgi.py文件中激活虚拟环境,或者在Apache配置中设置虚拟环境的路径。可以在wsgi.py文件的开头添加:```pythonimport syssys.path.append('E:/path/to/your/virtualenv/Lib/site-packages')```或者使用虚拟环境的Python可执行文件路径来指定WSGIPythonHome(在Apache配置中):```WSGIPythonHome "E:/path/to/your/virtualenv"```- **静态文件**:如果静态文件无法加载,还需要配置Apache处理静态文件。###总结用户的问题集中在网页无法打开,因此我们需要从Apache配置、mod_wsgi模块、项目wsgi配置以及错误日志等方面进行排查。按照上述步骤逐一检查,通常可以解决问题。下面我们根据用户的问题,生成相关问题:</think>### Windows Apache 部署 Django 项目网页无法打开的解决方法 以下是针对 Windows 系统下 Apache 部署 Django 时网页无法打开的排查步骤和解决方案: #### 1. **检查 Apache 配置语法** - 在 CMD 运行:`httpd -t` - 若出现 `Syntax error`(如引用[4]的错误),说明 `httpd.conf` 配置有误: ```apache # 常见错误示例 LoadModule wsgi_module "C:/Python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd" ``` - **解决方案**: - 确认 `mod_wsgi` 路径是否正确(使用绝对路径) - 检查 Python 版本是否匹配(如 `cp36` 对应 Python 3.6) #### 2. **验证 mod_wsgi 安装** - 运行命令获取正确配置: ``` mod_wsgi-express module-config ``` - 将输出复制到 `httpd.conf` 中(如引用[3]的配置) #### 3. **配置 WSGI 路径** 在 `httpd.conf` 添加: ```apache WSGIScriptAlias / "C:/path/to/yourproject/wsgi.py" WSGIPythonHome "C:/path/to/venv" # 虚拟环境路径 WSGIPythonPath "C:/path/to/yourproject" <Directory "C:/path/to/yourproject"> <Files wsgi.py> Require all granted </Files> </Directory> ``` - **关键点**: - 确保 `wsgi.py` 路径正确(引用[1][3]) - 虚拟环境路径必须指向 `venv` 的根目录(非 `Scripts` 文件夹) #### 4. **检查端口冲突** - 停止占用 80 端口的进程: ``` net stop http /y ``` #### 5. **查看错误日志** 定位 `logs/error.log`: - **常见错误**: - `Target WSGI script not found` → 检查 `WSGIScriptAlias` 路径 - `No module named 'django'` → 检查虚拟环境配置(引用[1][2]) #### 6. **验证 Django 设置** 在 `wsgi.py` 中添加测试代码: ```python def application(environ, start_response): status = '200 OK' output = b'Hello World!' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [output] ``` - 若显示 "Hello World!",说明 Apache 正常,问题在 Django 配置 #### 7. **防火墙设置** - 允许 80 端口通过防火墙: ``` netsh advfirewall firewall add rule name="Apache" dir=in action=allow protocol=TCP localport=80 ``` ### 常见问题总结表 | 问题现象 | 解决方案 | |---------------------------|------------------------------------------| | `httpd: Syntax error` | 检查 `LoadModule` 路径和 Python 版本匹配 | | `Target WSGI script not found` | 确认 `WSGIScriptAlias` 路径正确 | | `No module named 'django'`| 检查 `WSGIPythonHome` 指向虚拟环境 | | 访问时 500 内部错误 | 查看 Apache 日志中的 Python 异常堆栈 | > **重要提示**:修改配置后需重启 Apache: > `httpd -k restart` 或通过 Windows 服务重启 通过以上步骤,90% 的部署访问问题可解决。若仍失败,请提供 Apache 错误日志的最后 10 行内容进一步分析。 --- ### 相关问题 1. 如何确认 `mod_wsgi` 与 Python/Apache 版本兼容? 2. Django 静态文件无法加载时如何配置 Apache? 3. 如何将 Apache 服务设置为 Windows 开机自启? 4. 虚拟环境中缺少依赖包会导致哪些典型错误?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值