Django не может получить IP-адрес пользователя в среде AWS Elastic Beanstalk с балансировкой нагрузки - PullRequest
1 голос
/ 20 июня 2019

У меня настроена среда с балансировкой нагрузки в AWS Elastic Beanstalk с развернутым и запущенным приложением Django Django-user-session .Я хотел бы, чтобы он мог регистрировать внешние 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-sessionсобирать внешние пользовательские IP-адреса?

1 Ответ

1 голос
/ 21 июня 2019

Я нашел проблему: позиционирование x_forwarded_for.middleware.XForwardedForMiddleware имеет значение.Это должно прийти раньше user_sessions.middleware.SessionMiddleware:

MIDDLEWARE = [
    ...
    'x_forwarded_for.middleware.XForwardedForMiddleware',
    'user_sessions.middleware.SessionMiddleware',  # the django-user-sessions middleware
    ...
]
...