gunicorn + SCRIPT_NAME + Flask(在 nginx 后面)

问题描述 投票:0回答:1

我正在尝试使用路径上下文在 nginx 后面部署一个 Gunicorn + Flask 应用程序(https://example.com/my-app

应用程序使用gunicorn + Flask在本地运行良好,为gunicorn运行时设置环境变量“SCRIPT_NAME”(实际上是VS Code中的启动配置)。

            "env": {
                "SCRIPT_NAME": "/my-app",

然后

request.script_name
变成
/my-app
,正如预期的那样。

当我尝试将 SCRIPT_NAME 设置为 nginx 中的标头时

location /my-app/ {
                  include proxy_params;
                  proxy_set_header SCRIPT_NAME "/my-app";
                  proxy_pass http://localhost:5000;
          }

我可以看到

Script-Name: /my-app
在 Flask 应用程序的 request.headers 中

但是,

request.script_name
为空,因此所有 url_for(...) 都无法正常工作。

P.S.:我尝试在服务描述符中设置gunicorn的环境变量,但在(访问)日志中它没有显示。无论如何,标头解决方案似乎更合适,因为它将前缀保留在我将其安装到服务器其余部分的位置。

nginx flask gunicorn
1个回答
0
投票

物有所值。我找到了我的问题和解决方案。

SCRIPT_NAME 标头被

覆盖
proxy_set_header X-Forwarded-Prefix /;

隐藏在

proxy_params
包含文件中。

删除这个前缀会导致gunicorn在flask中设置正确的标头,并且flask的 url_for() 表现如预期。

© www.soinside.com 2019 - 2024. All rights reserved.