Получить публичный адрес приложения django - PullRequest
0 голосов
/ 20 марта 2019

У меня есть приложение django, прослушивающее 127.0.0.1 и доступное через nginx.

Какие есть варианты для получения информации об общедоступных IP-адресах (используемых клиентами) из django?application?

В настоящее время я делаю:

def get_local_ip(request):
    """Return the local IP (where the application is listening to)"""
    # TODO: this should be the server IP as seen by the UI (the public IP, where nginx is listening)
    return request.META.get('HTTP_HOST') if request else None

Но это возвращает 127.0.0.1.

1 Ответ

2 голосов
/ 20 марта 2019

Ваша конфигурация nginx должна добавить это в заголовки, не уверен, что это сделано по умолчанию.$server_addr - это то, что вам нужно добавить в заголовки, поэтому в вашей конфигурации nginx вам нужно добавить (при условии, что вы используете обратный прокси-сервер):

proxy_set_header X-Server-IP $server_addr;

А затем в вашем get_local_ip метод, с помощью которого вы сможете получить доступ к этому заголовку с помощью:

return request.META.get('HTTP_X_SERVER_IP')

Обратите внимание, что если ваш сервер nginx находится за балансировщиком нагрузки, это все равно не будет адрес, который «видят» ваши пользователи, так как ониувидеть IP-адрес вашего балансировщика нагрузки.Адрес, который они видят:

import socket
ip_address = socket.gethostbyname(request.META.get('SERVER_NAME'))

, который просто разрешает ваше доменное имя с использованием DNS (и может замедлить ваш запрос, так как необходимо выполнить поиск DNS, в зависимости от TTL, который вы установили в DNS).записи)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...