Django CSRFトークン認証に失敗する ELB -> Apache2 -> uwsgi


AWS ELB -> Apache2 -> mod_wsgi という構成だったが、
AWS ELB -> Apache2 -> uwsgi と、Djangoサーバを uwsgi に変えたら、

ログインフォームを送信する時など、django csrf 認証に失敗するようになった。

DEBUG = True で見てみると

アクセス禁止 (403)


Reason given for failure:

    Referer checking failed - does not match any trusted origins.

In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:

    Your browser is accepting cookies.
    The view function passes a request to the template's render method.
    In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
    If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.

You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.

You can customize this page using the CSRF_FAILURE_VIEW setting.

ELB で HTTPS を受け、Apache には 80 でリクエスト、uwsgi は HTTP プロトコルをリッスンしている(uwsgiプロトコルではない)


ProxyPass /
ProxyPassReverse /

Alias /static/ /var/django/xxxxx/staticfiles/
ProxyPass /static/ !


Django のコードを検索してみると

REASON_BAD_REFERER = "Referer checking failed - %s does not match any trusted origins."

こうなっていて、コードを読んで見ると CSRF_TRUSTED_ORIGINS にドメインを入れれば良いっぽい。


Currently unrated


Recent Tweets

  • ytyng

    ytyng @ytyng

    1 week, 2 days ago

  • ytyng

    ytyng @ytyng

    slack 503
    1 week, 6 days ago

  • ytyng

    ytyng @ytyng

    11:40 頃解消された。
    1 month, 1 week ago