Django+WSGI+Apache应用闲置后故障的配置问题求助
基于你给出的Ubuntu+Apache+Django 1.11+Python2.7+mod_wsgi 4.6.4的配置环境,我来帮你梳理这类多Django应用部署的关键配置要点和常见问题排查方向:
核心配置验证与优化要点
1. 全局WSGI设置的合理性
你配置的WSGIApplicationGroup %{GLOBAL}是非常关键的——它强制所有WSGI应用使用Python全局解释器,避免了mod_wsgi子解释器带来的兼容性问题。毕竟Django 1.11在Python2.7环境下,对子解释器的支持存在不少坑,这个设置能帮你避开大部分这类问题。
不过要注意:如果你的多个Django应用依赖不同版本的第三方库,那可能需要为每个应用单独配置独立的守护进程(你已经在做这件事了),确保彼此的依赖环境隔离。
2. WSGI别名文件的规范配置
你提到在wsgi-aliases里配置多应用的别名和守护进程,这里给你一个标准的示例模板,方便你对照检查:
# 为EmployeeDirectory应用创建独立守护进程 WSGIDaemonProcess EmployeeDirectory \ python-path=/home/django/EmployeeDirectory:/home/django/venvs/employee_env/lib/python2.7/site-packages \ user=www-data group=www-data \ processes=2 threads=15 # 指定该应用使用上述守护进程组 WSGIProcessGroup EmployeeDirectory # 绑定URL路径到WSGI入口文件 WSGIScriptAlias /EmployeeDirectory /home/django/EmployeeDirectory/EmployeeDirectory/wsgi.py \ process-group=EmployeeDirectory
这里要重点注意:
python-path必须包含项目根目录和虚拟环境的site-packages目录(如果用了虚拟环境的话),否则Django会找不到依赖包- 务必指定
user=www-data和group=www-data,确保守护进程用Apache的运行用户权限访问文件 WSGIScriptAlias里的process-group要和守护进程名完全匹配,避免应用跑到默认进程里
3. 权限与路径检查
这是多应用部署最容易踩坑的点:
- 确认Apache用户
www-data对所有项目目录、静态文件目录、媒体文件目录有读取权限(如果有文件上传需求,媒体目录还需要写入权限) - 可以用这条命令快速设置权限:
sudo chown -R www-data:www-data /home/django/ sudo chmod -R 755 /home/django/
4. 静态/媒体文件的配套配置
每个Django应用的静态和媒体文件都需要单独配置Apache别名,否则前端会加载失败:
# 配置EmployeeDirectory的静态文件访问 Alias /EmployeeDirectory/static /home/django/EmployeeDirectory/static <Directory /home/django/EmployeeDirectory/static> Require all granted </Directory> # 配置EmployeeDirectory的媒体文件访问 Alias /EmployeeDirectory/media /home/django/EmployeeDirectory/media <Directory /home/django/EmployeeDirectory/media> Require all granted </Directory>
别忘了运行Django的静态文件收集命令:
cd /home/django/EmployeeDirectory python manage.py collectstatic
5. 常见问题排查技巧
如果部署后出现500错误或应用无法访问,优先做这几件事:
- 查看Apache错误日志:
tail -f /var/log/apache2/error.log,几乎所有的配置错误、依赖缺失、权限问题都会在这里给出明确提示 - 验证mod_wsgi与Python版本匹配:运行
mod_wsgi-express module-config,确认输出里的Python路径是你使用的Python2.7 - 检查Django配置:确保
settings.py里的ALLOWED_HOSTS包含你的服务器域名/IP,DEBUG在生产环境要设为False
内容的提问来源于stack exchange,提问作者Pat Jones
相关产品推荐
相关产品推荐

