调试 Apache/Django/WSGI 错误请求 (400) 错误然后别名子路径

Debugging Apache/Django/WSGI Bad Request (400) Error then aliasing sub-path

我在域 example.com 上有一个 django projet 运行 刚刚好。 我想将一个特定的应用程序别名为 example2.com 但是,当我禁用 django 调试时,我不断收到 Bad Request (400) Error.

我在 debian jessie 上使用 django 1.7.7 和 python 2.7.9。 example.com 和 example2.com 均由带有 WSGI 模块 4.3.0 的 apache 2.4.10 提供。

在 apache 全局范围配置中我有:

WSGIDaemonProcess tracking user=www-data group=www-data processes=2 threads=15  python-path=/path/to/projects/tracking/ display-name=wsgi-django-tracking

在 example.com 虚拟主机中我有:

WSGIScriptAlias / /path/to/projects/tracking/tracking/wsgi.py
WSGIProcessGroup tracking
<Directory /path/to/projects/tracking/tracking/>
        <Files wsgi.py>
            Require all granted
        </Files>
</Directory>

在我的 example2.com 虚拟主机中(注意 WSGIScriptAlias 指令的两个参数末尾的 /myapp):

WSGIScriptAlias /myapp /path/to/projects/tracking/tracking/wsgi.py/myapp
WSGIProcessGroup tracking
<Directory /path/to/projects/tracking/tracking/>
        <Files wsgi.py>
            Require all granted
        </Files>
</Directory>

在 django 设置中我有:

ALLOWED_HOSTS = ["example.com", "example2.com"]

DEBUG=True一切正常。当我设置 DEBUG=False 时,example.com 继续工作,但是当我尝试访问 http://example2.com/myapp 时,我得到的只是:

Bad Request (400)

/var/log/apache2/error.log/var/log/apache2/access.log 中都没有显示任何有用信息,所以我有点困惑。

感谢您的帮助。

仔细检查 ALLOWED_HOSTS 条目中是否存在主机名。我知道你说的是,但是如果设置中缺少主机名,400 Bad Request 正是你会得到的错误。

请再次检查ALLOWED_HOSTS

请检查您的wsgi.py

这是正确的代码。

import os
import sys
sys.path.append('/var/www/Happ')
os.environ['DJANGO_SETTINGS_MODULE'] = 'Happ.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

要查看日志,您必须添加

<VirtualHost *:80>
    ErrorLog /var/log/apache2/error.log
</VirtualHost>