【问题标题】:Getting 400 'bad request' for deployed django app with apache2 + mod_wsgi使用 apache2 + mod_wsgi 为已部署的 django 应用程序获取 400 \'错误请求\'
【发布时间】:2023-02-09 19:27:25
【问题描述】:

我在同一台服务器上运行 2 个 django 应用程序(两者几乎相同)。第一个应用程序在虚拟环境和生产模式下运行没有任何问题。但是对于第二个部署的应用程序,我收到了错误的请求错误,即使它在虚拟环境中运行也没有任何问题。

我为整个项目设置 775,并将 www-data 设置为所有者。

我的 apache .conf 文件是

<VirtualHost *:80>
        ServerName prod-domain.de
<Directory /opt/myproject/mysite/mysite> 
 <Files wsgi.py>
     Require all granted
  </Files>
</Directory>

Alias /media/ /opt/myproject/mysite/media/
Alias /static/ /opt/myproject/mysite/base/static/
<Directory /static/>
        Require all granted
</Directory>
<Directory /media/>
        Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error-myproject.log
CustomLog ${APACHE_LOG_DIR}/access-myproject.log combined
</VirtualHost>
WSGIScriptAlias / /opt/myproject/mysite/mysite/wsgi.py
WSGIPythonPath /opt/myproject/mysite/env/lib/python3.8/site-packages

我的设置.py

DEBUG = True
ALLOWED_HOSTS = ["prod-domain.de"]

[...]

STATIC_ROOT = BASE_DIR / 'base/static/'

STATICFILES_DIRS = [BASE_DIR / 'myproject/static/', ]

STATIC_URL = 'static/'

# Base url to serve media files
MEDIA_URL = 'media/'

# Path where media is stored
MEDIA_ROOT = BASE_DIR / 'media/'

我在 apache conf 和 settings.py 上玩了很多,但 apache 没有在日志中显示任何错误,现在我几乎没有坚持。

也试过

ALLOWED_HOSTS = ['*']

没有效果。

【问题讨论】:

  • 你是什​​么意思“......即使它在虚拟环境中运行也没有任何问题”。在什么情况下应用程序运行没有错误消息?
  • 因为我只有 python 的基础知识,所以我希望我能得到你的问题:我创建了一个虚拟环境,打开了端口 8000 并在 DEBUG = False 的情况下运行。在这种情况下,应用程序正在正常运行。我需要在端口 80 / 443 上运行它......
  • 所以我知道你有两个应用程序在 runserver 上运行正常,现在你尝试将它们作为 Apache 服务器中的虚拟主机提供服务。 App1 正在运行,App2 返回 400。我首先建议在两个虚拟主机之间交换“ServerName prod-domain.de”,看看在这种情况下 app2 是否正在运行并且 App1 提供 400。是否有任何访问权限。日志?
  • WSGIScriptAlias 需要在虚拟主机声明中
  • 访问日志:“GET /favicon.ico HTTP/1.1”400 322“prod-domain.de”...我在 wsgi.load 上配置错误并进入 app2 的 error.log:“运行时配置禁用了 mod_wsgi 的嵌入式模式: /opt/app1/mysite/mysite/wsgi.py" --> 它指向 app1 -- app1 使用 runserver + apache 虚拟主机成功运行。 app2 使用 runserver 成功运行,但不是 apache 虚拟主机(每个应用程序都有自己的 .conf。现在我开始相信两个 wsgi 实例不能在同一个 apache web 服务器上运行......

标签: python-3.x django apache2 mod-wsgi bad-request


【解决方案1】:

在将 WSGIScriptAlias 移动到我的 apache .conf 文件中的 VirtualHost 标记内并在 wsgi.py 上进行跟踪后已修复:

import os, sys

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

sys.path.append('opt/myproject/mysite')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2018-12-31
    • 2012-12-20
    • 2011-10-28
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多