【发布时间】: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