Flask url_for не создает правильный URL под docker / docker-compose - PullRequest
0 голосов
/ 14 марта 2019

У меня есть приложение Flask, работающее в контейнере Docker, работающем под роем. Когда я использую url_for для создания внешнего URL для API, он возвращает имя службы докера, а не абсолютный путь.

Ex.

endpoint = url_for('api_v1.get_me_the_data', sn=123, 
                _external=True, _scheme="https")

возвращает что-то вроде https://app-primary:8000/api/v1/devices/123.

Другие детали:

  • работает с использованием Gunicorn за обратным прокси-сервером Nginx

Я пытался играть с SERVER_NAME, но без игры в кости. Есть ли простой способ это исправить? Или я должен написать функцию-обертку для url_for?

1 Ответ

1 голос
/ 14 марта 2019

Поскольку у вас есть приложение python внутри контейнера, а также за Nginx, вам может понадобиться ProxyFix , оно будет выполнять две вещи:

  • Получение IP-адреса клиента вместо IP-адреса контейнера nginx путем чтения REMOTE_ADDR
  • Установка имени хоста с помощью чтения HTTP_HOST

Далее необходимо убедиться, что nginx отправляет следующие заголовки:

proxy_set_header Host            $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...