You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

部署在AWS Elastic Beanstalk的Django项目HTTPS访问报错求助

搞定Elastic Beanstalk Django的HTTPS mod_wsgi错误

问题到底出在哪?

这个错误的核心很明确:当你开启HTTPS后,Apache的HTTPS虚拟主机配置没跟上HTTP的节奏。Elastic Beanstalk默认禁用了mod_wsgi的嵌入式模式,要求用守护进程模式跑Django,但你的HTTPS配置里没设置这个,导致访问HTTPS时Apache试图用被禁用的嵌入式模式加载WSGI脚本,直接触发报错。

为啥HTTP正常?因为HTTP的虚拟主机配置(就是wsgi.conf)已经正确设置了守护进程模式,HTTPS那边没同步,自然就出问题了。


一步步解决:调整wsgi.conf并同步HTTPS配置

别慌,按下面的步骤来就能搞定:

  1. 先登录到你的EB实例(用EB CLI的eb ssh命令,或者AWS控制台的实例连接都可以)。

  2. 打开/opt/httpd/conf.d/wsgi.conf编辑:

    sudo nano /opt/httpd/conf.d/wsgi.conf
    
  3. 确保文件里有这些关键配置(没有就加上,已有就核对调整):

    # 配置WSGI守护进程,指定Python路径、虚拟环境、运行用户等
    WSGIDaemonProcess wsgi process-group=wsgi application-group=%{GLOBAL} \
        python-path=/opt/python/current/app \
        home=/opt/python/run/venv \
        user=wsgi group=wsgi \
        threads=15 maximum-requests=10000
    # 指定所有WSGI请求用这个守护进程组
    WSGIProcessGroup wsgi
    # 把根路径映射到你的Django WSGI脚本,同时指定进程组
    WSGIScriptAlias / /opt/python/current/app/connectshops/wsgi.py process-group=wsgi application-group=%{GLOBAL}
    
    # 静态文件的配置(如果你的项目用了静态文件,这部分不能少)
    Alias /static/ /opt/python/current/app/static/
    <Directory /opt/python/current/app/static/>
        Require all granted
    </Directory>
    
    # 确保WSGI脚本所在目录的权限正确
    <Directory /opt/python/current/app/connectshops/>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    

    重点就是WSGIDaemonProcessWSGIProcessGroup这两行,它们强制Apache用守护进程模式运行你的Django应用,避开被禁用的嵌入式模式。

  4. 接下来检查/opt/httpd/conf.d/ssl.conf,在它的<VirtualHost _default_:443>块里加上一行:

    WSGIProcessGroup wsgi
    

    这行的作用是让HTTPS请求也使用上面配置好的守护进程组,不会自己瞎用嵌入式模式。

  5. 保存所有修改后,重启Apache生效:

    sudo service httpd restart
    

重要提醒:别直接改实例配置!

直接在实例上改配置文件的话,下次EB环境更新或者重新部署,这些修改会被覆盖得一干二净。正确的姿势是用.ebextensions来持久化配置:

在你的Django项目根目录创建.ebextensions/httpd/conf.d/wsgi.conf文件,把上面的Apache配置内容放进去,这样每次部署时EB都会自动把这个配置应用到实例上,一劳永逸。

另外别忘了确认你的EB环境已经正确配置了SSL证书:通过AWS Certificate Manager上传证书,然后在EB环境的负载均衡器设置里开启HTTPS监听,不然就算配置对了,HTTPS也没法正常工作。

内容的提问来源于stack exchange,提问作者Jay P.

火山引擎 最新活动