我在AWS Elastic Beanstalk中设置了负载平衡的环境,其中部署了Django应用并运行Django-user-sessions。我希望它能够记录用户会话的外部IP地址,但是记录的所有内容都是内部IP。我有另一个没有负载均衡的环境,并且正在收集外部用户IP,因此,我相当确定用户IP将被负载均衡器的内部IP覆盖。
我尝试安装django-xforwardedfor-middleware,该软件应该为每个请求添加request.META['REMOTE_ADDR'] = request.META['HTTP_X_FORWARDED_FOR'].split(',')[0].strip()
,但这并不能解决问题。
我的.ebextensions
中还有一个HTTPS引擎重写,它不是在正常运行的环境中运行的,但我认为不是问题所在:
files:
"/etc/httpd/conf.d/ssl_rewrite.conf":
mode: "000644"
owner: root
group: root
content: |
RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</If>
我还有其他方法可以尝试使django-user-sessions收集外部用户IP吗?
答案 0 :(得分:1)
我发现了问题:x_forwarded_for.middleware.XForwardedForMiddleware
的位置很重要。它应该在user_sessions.middleware.SessionMiddleware
之前出现:
MIDDLEWARE = [
...
'x_forwarded_for.middleware.XForwardedForMiddleware',
'user_sessions.middleware.SessionMiddleware', # the django-user-sessions middleware
...
]