【发布时间】:2010-12-10 07:38:23
【问题描述】:
所以我用 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 键,我不能只做 proxy_set_header remote_addr $remote_addr。如果没有找到远程地址密钥,我可以做的是读取 X-Real-IP,但我很好奇是否有更智能的解决方案。
谢谢!
【问题讨论】:
-
这不是正确的解决方案,但我添加了一个将 HTTP_X_REAL_IP 转换为 REMOTE_ADDR 的 django 中间件。
-
这些语句将帮助您:proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme;