シンプルなDjangoアプリはデバッグモード(_manage.py runserver
_)で正常に動作し、開発ボックスでWSGI + Apacheの下で動作しましたが、EC2にプッシュすると、断続的に(10-80%時刻)表示しようとするURLのBad Request (400)
のエラー(アプリ内またはDjango admin内)。
これに関するデバッグ情報はどこで入手できますか? _/var/log/Apache2/error.log
_であっても、_LogLevel=info
_には何も表示されません。バージョンを確認し、リクエスト環境を記録しました(cf. ModWSGI Debugging Tips )。大きな違いはありません。
残っていたのは、Python 2.7.1に対してビルドされたUbuntu 12.04のmod_wsgi(libapache2-mod-wsgi 3.3-4build1)を使用していることです。 Python 2.7.3があります。 Djangoは1.6で、Ubuntu Preciseバージョンよりも新しいです。クリーンアップするのは非常に難しく、これらはマイナーバージョンの変更のように見えるため、ソースからパッケージのビルドを開始することをheします.
ご協力ありがとうございます。
(参照用に、Apache configおよびWSGIアプリがあります)
_<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
WSGIScriptAlias /rz /usr/local/share/rz/rz.wsgi
...
_
_import os
import sys
import Django.core.handlers.wsgi
import pprint
path = '/usr/local/share/rz'
if path not in sys.path:
sys.path.insert(0, path)
os.environ['Django_SETTINGS_MODULE'] = 'rz.settings'
class LoggingMiddleware:
def __init__(self, application):
self.__application = application
def __call__(self, environ, start_response):
errors = environ['wsgi.errors']
pprint.pprint(('REQUEST', environ), stream=errors)
def _start_response(status, headers, *args):
pprint.pprint(('RESPONSE', status, headers), stream=errors)
return start_response(status, headers, *args)
return self.__application(environ, _start_response)
application = LoggingMiddleware(Django.core.handlers.wsgi.WSGIHandler())
_
次のようにALLOWED_HOSTS設定をsettings.pyに追加します...
ALLOWED_HOSTS = [
'.example.com', # Allow domain and subdomains
'.example.com.', # Also allow FQDN and subdomains
]
私はこれと同じ問題を抱えていて、答えを見つけました ここでドキュメントに
更新:Django 1.6ドキュメントはオンラインではなくなりました。リンクを更新して、ALLOWED_HOSTS
設定のDjango 1.7ドキュメントに移動しました。
確実に設定した場合ALOWED_HOSTS
-ホスト名にアンダースコアが含まれていないことを確認してください。技術的に違法です。
さまざまな機能を印刷する必要がありましたが、この正規表現はDjango.http
Host_validation_re = re.compile(r"^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9:]+\])(:\d+)?$")
実際、私のドメインにはアンダースコアが含まれていました。
これはソリューションではないですが、デバッグ目的の場合、settings.pyでALLOWED_HOSTS設定をこのように設定できます
ALLOWED_HOSTS = ['*']
それは間違いなく動作するはずです。そうでない場合、少なくとも問題はDjango指定されたURLへのアクセスを拒否していないことがわかります。