Windows下Apache2.4部署Odoo11出现内部服务器错误求助
排查Odoo11 + Apache2.4 + Python2.7(Windows)的500内部服务器错误
从你提供的错误日志和Apache配置来看,核心问题出在Odoo无法访问默认数据目录,加上Apache配置里混了WSGI和CGI规则导致冲突,咱们一步步解决:
1. 先定位错误根源
错误日志最后追踪到_get_default_datadir()函数,结合开头的End of script output before headers,说明:
- Odoo启动时尝试获取默认数据目录,但Apache运行的系统用户没有该目录的读写权限
- 你的Apache配置同时启用了WSGI和CGI处理,这会导致Odoo的WSGI脚本被错误地当作CGI执行,引发输出头问题
2. 修正Apache配置(移除CGI规则,调整Python路径)
把你的Apache虚拟主机配置改成下面这样,去掉所有CGI相关的配置,确保只使用WSGI:
WSGIPythonPath D:/Workspace/Odoo <VirtualHost *:80> ServerName 127.0.0.1 ServerAlias localhost WSGIScriptAlias / D:/Workspace/Odoo/odoo/odoo-wsgi.py ErrorLog D:/Workspace/Odoo/logs/odoo-error.log CustomLog D:/Workspace/Odoo/logs/odoo-access.log combined <Directory "D:/Workspace/Odoo/odoo/"> Require all granted </Directory> </VirtualHost>
- 注意
WSGIPythonPath设置为Odoo的根目录D:/Workspace/Odoo,而不是子目录odoo,这样Python才能正确导入odoo模块 - 移除了
Options +ExecCGI、AddHandler cgi-script等CGI相关配置,避免WSGI脚本被误处理
3. 调整Odoo-WSGI脚本,明确指定配置和数据目录
打开你的odoo-wsgi.py,修改成以下内容,确保加载Odoo配置并指定可访问的数据目录:
import sys import odoo # 方法1:加载自定义配置文件(推荐) # 替换成你的Odoo配置文件路径,确保文件存在且Apache用户有读写权限 odoo.tools.config.parse_config(['--config=D:/Workspace/Odoo/odoo.conf']) # 方法2:直接指定数据目录(如果没有配置文件) # odoo.tools.config['data_dir'] = 'D:/Workspace/Odoo/odoo_data' # 加载Odoo服务模块 odoo.service.server.load_server_wide_modules() # 导出WSGI应用 application = odoo.service.wsgi_server.application
- 如果用方法1,你的
odoo.conf里要明确data_dir路径,比如data_dir = D:/Workspace/Odoo/odoo_data
4. 修复Windows权限问题
这是Windows部署最容易踩的坑:
- 打开Windows服务管理器,找到Apache服务(通常叫
Apache2.4) - 右键→属性→登录,查看Apache运行的用户(默认是
LocalSystem或自定义用户) - 找到你的Odoo根目录
D:/Workspace/Odoo,右键→属性→安全 - 添加Apache运行用户,给它读取、写入、修改的权限,包括所有子目录和文件
5. 额外验证步骤
- 确保你的
mod_wsgi是针对Python2.7编译的,且和Python的位数(32/64位)完全匹配,不匹配会导致模块导入失败 - 确认Odoo11的所有依赖包都已正确安装(比如
psycopg2==2.7.3.1、lxml、python-dateutil等),可以用pip freeze检查
做完以上步骤后,重启Apache服务,再访问http://localhost,应该能正常加载Odoo了。如果还有错误,查看更新后的错误日志,针对性排查即可。
内容的提问来源于stack exchange,提问作者Mubeen Ali
相关产品推荐
相关产品推荐

