【发布时间】:2018-10-04 17:32:33
【问题描述】:
Flask 有SERVER_NAME 的设置,这在大多数时候都很方便。由于我的应用程序有后台任务,我使用 Flask 上下文。要使上下文正常工作,应设置 SERVER_NAME。
当设置SERVER_NAME 时,检查传入请求以匹配此值,否则找不到路由。当在前面放置一个 nginx(或其他网络服务器)时,SERVER_NAME 还应该包含端口,反向代理应该处理重写的东西,对外界隐藏端口号(它确实如此)。会话 cookie 工作现代浏览器代理传递的url名称应该与SERVER_NAME相同,否则浏览器拒绝发送cookie。这可以通过在/etc/hosts中添加官方hostname并将其指向127.0.0.1来解决。
有一件事我还没有弄清楚,那就是后台任务中的 url。 url_for 与 _external 选项一起使用以在它发送的邮件中生成 url。但是该 url 包含端口,这当然不同于我的 nginx 正在运行的 443 端口...
从SERVER_NAME 中删除端口,会使第一段中描述的内容失败。
那么处理邮件中的url_for 的最佳选择是什么?创建一个单独的配置设置?创建我自己的url_for?
【问题讨论】:
标签: python email flask nginx-reverse-proxy celery-task