sashimi4’s diary

日々の雑多なメモを書きます

Django Debug Toolbar がデプロイ環境で表示されない件

github.com

ツールバーの表示可否判定は, デフォルトでは SHOW_TOOLBAR_CALLBACK として show_toolbar() が呼ばれており, その中で request.META.get("REMOTE_ADDR")settings.INTERNAL_IPS に含まれるかの判定があり, nginx などでリバースプロキシしていると REMOTE_ADDR が空になっている様子.

https://github.com/jazzband/django-debug-toolbar/blob/be4e9522d314f053f32b9282903fbdb002621f0e/debug_toolbar/middleware.py#L22

リバプロしているので X-Forwarded-For を使えば良さそうな気がする.

https://django-debug-toolbar.readthedocs.io/en/latest/configuration.html#show-toolbar-callback で独自関数を定義できると書いてあるので,

settings.py で下記のように SHOW_TOOLBAR_CALLBACK を定義してあげると無事にデプロイ環境でも表示されるようになった.

# https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#configure-internal-ips
if DEBUG:
    hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
    INTERNAL_IPS = [ip[: ip.rfind(".")] + ".1" for ip in ips] + ["127.0.0.1", "10.0.2.2"]

    DEBUG_TOOLBAR_CONFIG = {
        "SHOW_TOOLBAR_CALLBACK": lambda request: settings.DEBUG and request.META.get("HTTP_X_FORWARDED_FOR") in settings.INTERNAL_IPS,
    }