Ubuntu 14.04 Apache部署Django 2.0.1时SSL配置失败求助
看起来你踩了生产环境部署的常见误区——你还在使用Django的开发服务器(runserver)处理请求,而开发服务器本身完全不支持HTTPS,这就是你看到报错的直接原因。结合你的配置情况,我们一步步来解决:
1. 立即停止Django开发服务器
开发服务器(python3 manage.py runserver)仅用于本地开发调试,绝对不能用在生产环境。先杀掉正在8000端口运行的进程:
sudo lsof -t -i:8000 | xargs sudo kill
之后不要再启动runserver,所有请求应该由Apache通过WSGI来处理。
2. 修复Apache配置中的笔误
你的SSL虚拟主机配置里有个致命拼写错误:WGIDaemonProcess应该是WSGIDaemonProcess(少了一个S)。这个错误会导致WSGI守护进程无法启动,Apache无法正确转发请求到Django。
同时调整WSGIDaemonProcess的参数,正确指定虚拟环境和项目路径:
WSGIDaemonProcess cel python-path=/var/www/html/angeles4four.info/public_html/Cel2FahConversion python-home=/var/www/html/angeles4four.info/public_html/Cel2FahConversion/venv WSGIProcessGroup cel WSGIScriptAlias / /var/www/html/angeles4four.info/public_html/Cel2FahConversion/Cel2FahConversion/wsgi.py
python-path指向你的Django项目根目录python-home指向虚拟环境目录,确保Apache使用正确的Python环境
3. 验证Apache配置并重启服务
先检查配置文件是否有语法错误:
sudo apache2ctl configtest
如果输出Syntax OK,就重启Apache使配置生效:
sudo systemctl restart apache2
4. 完善Django生产环境设置
在settings.py中补充或确认以下配置:
# 确保允许的主机包含你的域名 ALLOWED_HOSTS = ['angeles4four.info', 'www.angeles4four.info'] # 已设置的安全配置保留 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_SSL_REDIRECT = True # 生产环境必须关闭DEBUG DEBUG = False # 指定静态文件的根目录(确保你已经运行过collectstatic) STATIC_ROOT = '/var/www/html/angeles4four.info/public_html/static'
别忘了运行静态文件收集命令,让Apache能正确访问静态资源:
cd /var/www/html/angeles4four.info/public_html/Cel2FahConversion source venv/bin/activate python manage.py collectstatic
5. 确认端口监听与请求流向
用以下命令确认Apache正在监听80和443端口:
sudo netstat -tulpn | grep apache2
你应该能看到0.0.0.0:80和0.0.0.0:443的监听记录。之后直接访问https://www.angeles4four.info(不要加:8000端口),应该就能正常访问Django应用了。
为什么之前会报错?
你看到的服务器日志里的HTTPS请求错误,是因为你可能直接访问了https://www.angeles4four.info:8000——开发服务器只能处理HTTP请求,收到HTTPS的加密数据包后无法解析,就会抛出Bad request错误。而Apache的配置错误又导致正常的443端口请求无法正确转发到Django,双重问题叠加导致了现在的故障。
内容的提问来源于stack exchange,提问作者enoren5

