У меня есть приложение фляги, использующее nginx для завершения обратного прокси / ssl, но у меня возникают проблемы при использовании url_for и перенаправления в фляге.
Запись nginx.conf:
location /flaskapp {
proxy_pass http://myapp:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Идея состоит в том, что пользователь переходит на
https://localhost:port/flaskapp/some/location/here
, и его следует передать колбе как
http://localhost:8080/some/location/here
Thisработает достаточно хорошо при переходе к определенному маршруту, однако, если маршрут имеет redirect(url_for('another_page'))
, браузер перенаправляется на
http://localhost:8080/another_page
и дает сбой, когда URL, который я действительно хочу перейтиto is:
https://localhost:port/flaskapp/another_page
Я пробовал несколько других ответов для подобных ситуаций, но, похоже, ни один из них не делал именно то, что я делаю здесь. Я попытался использовать _external=True
, установить app.config['APPLICATION_ROOT'] = '/flaskapp'
и множество итераций различных команд proxy_set_header
в nginx.conf
, но безуспешно.
В качестве дополнительного усложнения мое колб-приложение использует flask-login
и CSRF. печенье. Когда я попытался установить APPLICATION_ROOT
, приложение перестало считать файл cookie CSRF установленным flask-login
действительным, что, как я полагаю, как-то связано с происхождением.
Поэтому мой вопрос: как мне сделать так, чтобы приflask возвращает redirect()
клиенту, nginx понимает, что указанный ему адрес должен flaskapp
записываться в него?