django - REMOTE_ADDR 未使用 nginx 和 Tornado 发送到 Django

标签 django nginx tornado

因此,我使用 nginx 进行了一个简单的设置,用于静态媒体和负载平衡,并将 Tornado 作为 django 的网络服务器(运行 4 个服务器)。我的问题是 remote_addr 没有传递给 django,所以我收到了一个 KeyError:
article.ip = request.META['REMOTE_ADDR']
由于 nginx.conf,远程地址作为 X-Real-IP (HTTP_X_REAL_IP) 发送:

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect false;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://frontends;
    }

由于 HTTP 附加到 META key ,我不能只执行 proxy_set_header remote_addr $remote_addr。如果找不到远程地址键,我可以做的是读取 X-Real-IP,但我很好奇是否有更智能的解决方案。

谢谢!

最佳答案

试试这个:

location / {
    proxy_pass http://frontends;
    proxy_pass_header Server;
    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_set_header REMOTE_ADDR $remote_addr;
}

只需添加 proxy_set_header REMOTE_ADDR它应该运行良好。

尝试过:
  • Django 1.5.4
  • Nginx 1.4.3
  • Tornado 2.2.1
  • 关于django - REMOTE_ADDR 未使用 nginx 和 Tornado 发送到 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627901/

    相关文章:

    python - 我想使用 python-social-auth 通过 vk.com 进行授权,并通过重定向 uri 获得错误

    python - 登录django项目的最佳实践

    python - Django Admin - 覆盖 get_form 后缺少内联表单

    docker - 如何从客户端访问使用 Nginx Ingress+Kubernetes 托管的 MySql

    python - Tornado 和 WTForms

    django - 如何在 Django 上获取当前语言环境的 "short_date_format"?

    django - 通过 Nginx、Django 提供 206 字节范围服务

    apache - Longpolling对服务器的影响

    python - 是否可以列出所有被阻止的 Tornado 协程

    sockets - 是否为RequestHandler.write提供了 Tornado 回调?