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
?