У меня есть среда с балансировкой нагрузки, настроенная в AWS Elastic Beanstalk с развернутым приложением Django и работающим Пользовательские сеансы Django. Я бы хотел, чтобы он мог регистрировать внешние IP-адреса сеанса пользователя, но все, что регистрируется, является внутренним IP-адресом. У меня есть другая среда, которая не сбалансирована по нагрузке, и собираются внешние IP-адреса пользователей, поэтому я почти уверен, что IP-адрес пользователя перезаписывается внутренним IP-адресом балансировщика нагрузки.
Я пытался установить django-xforwardedfor-middleware, который якобы добавляет request.META['REMOTE_ADDR'] = request.META['HTTP_X_FORWARDED_FOR'].split(',')[0].strip()
к каждому запросу, но это не решило проблему.
У меня также есть переписанный движок HTTPS в моем .ebextensions
, то есть нет, работающий в среде, которая работает правильно, но я не думаю, что это проблема:
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-адреса внешних пользователей?
Да, я просто проверяю, и он действительно содержится в request.META['HTTP_X_FORWARDED_FOR']. Таким образом, похоже, что промежуточное программное обеспечение не выполняет свою работу.
Я обнаружил проблему: позиционирование x_forwarded_for.middleware.XForwardedForMiddleware
имеет значение. Это должно быть до user_sessions.middleware.SessionMiddleware
:
MIDDLEWARE = [
...
'x_forwarded_for.middleware.XForwardedForMiddleware',
'user_sessions.middleware.SessionMiddleware', # the django-user-sessions middleware
...
]
Пропускает ли балансировщик нагрузки IP-адрес пользователя? В какой области? (посмотрите в request.META в вашем приложении Django)