REMOTE_ADDR, не отправляемый Django, использующему nginx и торнадо

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

, ответ Nescio предоставляет хороший список. Вторая ссылка под PHP в моем списке также содержит в основном ту же информацию, которая достаточно проста, что необходимо быть в состоянии перевести его в любой язык.

Имеют в виду, что с помощью агента пользователя для что-либо изобилует проблемами. Если Вы не готовы выделить часть своего времени разработки к контролю агентов пользователя, посещающих Ваш сайт и выполняющих постоянное обслуживание, необходимо постараться не делать его полностью. Неважно, что Ваш пример использования для необходимости обнаружить ОС, каждая ОС в каждой платформе может иметь разительные перемены в очень короткие периоды времени, таким образом, важно помнить это и быть осторожным относительно того, как и почему Вы делаете обнаружение ОС.

Для разработки риски: На рабочем столе новая версия ОС может выходить каждые 6 недель (ОС Chrome), 6 месяцев (Ubuntu), 1 год (Mac OS), или 2-3 года (Windows). Тогда также необходимо объяснить Ose, выпущенные для телефонов, планшетов, игровых консолей, часы , и т.д. который может иметь намного более частые циклы выпуска и непредсказуемые изменения в доле рынка. Только посмотрите, как BlackBerry, Palm OS, сеть ОС, iOS, Android, Windows Mobile и Windows Phone изменили долю рынка только за последние несколько лет для именования некоторых.

, Если операционная система не является зависимостью Вашего сайта, как то, если Вы создаете целенаправленную страницу "загрузки" для приложения (который сам по себе может изобиловать проблемами), почти всегда лучше использовать выявление признаков , который позволит Вам соответствовать требованиям завтрашнего дня своя разработка, не имея необходимость постоянно поддерживать код определения браузера или обнаружения ОС.

10
задан Nixarn 26 October 2009 в 23:27
поделиться

3 ответа

Нет, невозможно передать remote_addr. Итак, единственное известное мне решение - использовать X-Real-IP или X-Forwarded-For и убедиться, что серверная часть обрабатывает их правильно.

Изменить: это относится к fastcgi_pass, а не к обычному nginx proxy_pass

1
ответ дан 3 December 2019 в 13:44
поделиться

У меня аналогичная установка. Поместив nginx перед apache, я заметил, что IP в журналах apache всегда был 127.0.0.1. Похоже, установка libapache2-mod-rpaf исправила это. Понятия не имею, связана ли ваша проблема.

5
ответ дан 3 December 2019 в 13:44
поделиться

Вот как я решил эту проблему. С помощью этого промежуточного ПО:

class SetRemoteAddrMiddleware(object):
    def process_request(self, request):
        if not request.META.has_key('REMOTE_ADDR'):
            try:
                request.META['REMOTE_ADDR'] = request.META['HTTP_X_REAL_IP']
            except:
                request.META['REMOTE_ADDR'] = '1.1.1.1' # This will place a valid IP in REMOTE_ADDR but this shouldn't happen

Надеюсь, это поможет!

16
ответ дан 3 December 2019 в 13:44
поделиться