Flask SERVER_NAME устанавливает лучшие практики

Flask имеет настройку SERVER_NAME, которая в большинстве случаев удобна. Поскольку у моего приложения есть фоновая задача, я использую контекст Flask. Чтобы контекст работал, необходимо установить SERVER_NAME.

Когда установлено SERVER_NAME, входящие запросы проверяются на соответствие этому значению, иначе маршрут не найден. При размещении nginx (или другого веб-сервера впереди) SERVER_NAME также должен включать порт, а обратный прокси-сервер должен обрабатывать перезаписи, скрывая номер порта от внешнего мира (что он и делает). Для работы файлов cookie сеанса в современных браузерах URL-адрес прокси-сервера должен совпадать с SERVER_NAME, иначе браузер откажется отправлять файлы cookie. Это можно решить, добавив официальный hostname в /etc/hosts и указав его на 127.0.0.1.

Есть одна вещь, которую я еще не понял, и это URL-адрес в фоновых задачах. url_for используется с параметром _external для генерации URL-адресов в отправляемой почте. Но этот URL-адрес включает порт, который, конечно, отличается от порта 443, на котором работает мой nginx...

Удаление порта из SERVER_NAME приводит к сбою описанного в первом абзаце.

Итак, каковы мои лучшие варианты обработки url_for по почте. Создать отдельный параметр конфигурации? Создать свой url_for?


person Christof Haerens    schedule 24.04.2018    source источник


Ответы (1)


Вы должны указать url_for(location, _external=True) или включить proxy_params, если вы используете nginx.

person Free Code    schedule 06.02.2019