#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-адреса клиента.