Доступ к заголовку HTTP_X_FORWARDED_FOR в Apache для Django

#django #apache #http-headers #ip-address

#django #apache #http-заголовки #ip-адрес

Вопрос:

Я хочу прочитать IP-адрес клиента в Django. Когда я пытаюсь сделать это сейчас с заголовком HTTP_X_FORWARDED_FOR, это завершается неудачей. Ключ отсутствует.

По-видимому, это связано с настройкой моего сервера Apache (я развертываю с apache и mod_wsgi). Я должен настроить его как обратный прокси? Как мне это сделать, есть ли последствия для безопасности?

Спасибо, Брендан

Комментарии:

1. где вы ищете этот заголовок?

Ответ №1:

Обычно эти заголовки доступны в request.META . Итак, вы могли бы попробовать request.META['HTTP_X_FORWARDED_FOR'] .

Вы также используете Apache в качестве обратного прокси-сервера? Мне это не кажется правильным. Обычно используется статический сервер с меньшим весом, такой как nginx, в качестве обратного прокси для Apache, на котором запущен сервер приложений. Nginx может отправлять любые заголовки, которые вам нравятся, используя proxy_set_header запись конфигурации.

Комментарии:

1. Привет, Макс, я попробовал этот МЕТА-ключ, но он выдал ошибку. Этот заголовок недоступен. Я также посмотрел в Firebug, и он не отображается.

2. Это зависит от того, правильно ли настроен ваш обратный прокси. Вы уверены, что прокси настроен правильно для отправки этого заголовка?

3. Привет, Макс, я не знаю, как настроить обратный прокси, это была моя проблема. Кроме того, я развертываю с Apache и mod_wsgi, для записи

4. Почему вы вообще используете обратный прокси? Не имеет смысла передавать запрос через прокси на тот же сервер, который получает запрос. Вы просто хотите получить IP-адрес? Это запрос. META[‘REMOTE_ADDR’], если не за прокси.

5. Я не использую обратный прокси. Мой вопрос был в том, должен ли я использовать обратный прокси. Когда я посмотрел запрос. META[‘REMOTE_ADDR’], я продолжал получать 127.0.0.1, который является локальным хостом. Я запускал его на своем локальном хосте через сервер разработки django. Я исследовал онлайн и нашел статьи, в которых говорилось, что REMOTE_ADDR не работает с прокси и что вам пришлось использовать FORWARDED_FOR.

Ответ №2:

Я не знаком с mod_wsgi, но обычно IP-адрес клиента доступен в переменной окружения REMOTE_ADDR. Если клиент обращается к веб-сайту через прокси-сервер или если ваша настройка включает обратный прокси-сервер, адрес прокси-сервера будет вместо этого в переменной REMOTE_ADDR, и ПРОКСИ-сервер может скопировать исходный IP-адрес клиента в HTTP_X_FORWARDED_FOR (в зависимости от его конфигурации).

Если у вас есть объект запроса, вы можете получить доступ к этим переменным среды следующим образом :

request.environ.get('REMOTE_ADDR')
request.environ.get('HTTP_X_FORWARDED_FOR')

Не должно быть необходимости изменять конфигурацию вашего Apache или настраивать обратный прокси-сервер только для получения IP-адреса клиента.