【问题标题】:Django https ssl configuration error related to mod_wsgi与 mod_wsgi 相关的 Django https ssl 配置错误
【发布时间】:2023-03-27 10:18:02
【问题描述】:

我将我的 Django 项目部署到 AWS Linux AMI 并认为是 Elastic Beanstalk。 目前,它在 http 上运行良好,但在 https 上,它显示如下错误。

[:error] [pid 3090] [client 24.43.39.130:64135] Embedded mode of mod_wsgi disabled by runtime configuration: /opt/python/current/app/connectshops/wsgi.py

我一直在努力调试错误,但我还想不通。 有谁知道出了什么问题?我应该在我的 ssl.conf 文件中添加一些配置吗?

编辑

/opt/httpd/conf.d/wsgi.conf

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On

<VirtualHost *:80>

  Alias /static/ /opt/python/current/app/static/
  <Directory /opt/python/current/app/static/>
    Order allow,deny
    Allow from all
  </Directory>


  WSGIScriptAlias / /opt/python/current/app/connectshops/wsgi.py


  <Directory /opt/python/current/app/>
    Require all granted
  </Directory>

  WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
  python-home=/opt/python/run/venv/ \
  python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages user=wsgi group=wsgi \
  home=/opt/python/current/app
  WSGIProcessGroup wsgi
</VirtualHost>

LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" comb$

这是我的 wsgi.conf 中的代码。正如您所说,我目前将 WSGIRestrictEmbedded 设为 ON,但我不确定我现在使用的是哪一个。 如您所知,我对 VirtualHost *:443 有相同的代码

【问题讨论】:

  • 您有WSGIRestrictEmbeddedOn 来禁用嵌入式模式,但没有正确设置您的配置以使WSGI 应用程序在守护程序模式下运行。显示 WSGI 应用程序的 Apache 配置。您是否在任何地方使用WSGIProcessGroup 指令或process-group 选项到WSGIScriptAlias
  • 我想我正在使用 WSGIScriptAlias,但我不确定,因为我对这部分很陌生。如果我有 WSGIScriptAlias,我应该删除 WSGIRestrictEmbedded 吗?
  • @GrahamDumpleton 我编辑了帖子以添加我的 WSGI。请检查一下。
  • @GrahamDumpleton 就像你问的那样,我正在使用 WSGIProcessGroupWSGIScriptAliasWSGIScriptAlias。我应该删除所有这些吗?

标签: django ssl https mod-wsgi


【解决方案1】:

尝试使用:

  WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
      python-home=/opt/python/run/venv/ \
      python-path=/opt/python/current/app user=wsgi group=wsgi \
      home=/opt/python/current/app

  WSGIScriptAlias / /opt/python/current/app/connectshops/wsgi.py process-group=wsgi

  <Directory /opt/python/current/app/>
    Require all granted
  </Directory>

我看不出您的内容有什么特别的问题,但我更改了顺序并使用了process-group 而不是WSGIProcessGroup

还从 python-path 中删除了不需要添加的目录。

不理会WSGIRestrictEmbedded 指令。

【讨论】:

  • ssl.conf 和 wsgi.conf 是否应该具有与上述相同的代码?我让它们具有相同的代码,但显示错误消息“名称与以前的 WSGI 守护程序定义重复”。关于 WSGIDaemonProcess
  • 不要在 HTTP/HTTPS 对的第二个 VirtualHost 中包含 WSGIDaemonProcess,但仍然在第二个 VirtualHost 中使用 process-group=wsgi。在ServerName 和端口相同的非常特殊的情况下,mod_wsgi 将允许您从第二个引用第一个VirtualHost 中定义的守护进程组。这是专门为 HTTP/HTTPS 实例共享一个守护进程组的。
  • 好的,现在它运行良好。我所做的是,在 ssl 和 wsgi 的两侧,它们都有相同的代码,但它们有不同的 WSGIDaemonProcess 的名称,现在它完全可以正常工作了。谢谢@格雷厄姆。由于我对这件事很陌生,一切都让我感到困惑,但你给了我一个很大的线索来解决问题!
  • 如果您在每个 VirtualHost 中都有单独的 WSGIDaemonProcess,那么您将浪费内存,因为在不需要时有两个单独的应用程序副本。正如我所说,您可以从第二个中删除 WSGIDaemonProcess 并使用第一个中的名称而不是第二个中的名称,然后它们都将使用相同的名称。这是推荐的设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2015-12-25
相关资源
最近更新 更多