gunicorn + cnT_NAME + flask(在nginx后面)

jaql4c8m  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(114)

我正在尝试使用路径上下文(https://example.com/my-app)在nginx后面部署gunicorn + flask应用程序
该应用程序在本地使用gunicorn + flask运行良好,为gunicorn运行时设置环境变量“WNT_NAME”(实际上是VS Code中的启动配置)。

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

然后request.script_name变成/my-app,正如预期的那样。
当我尝试在nginx中将codeT_NAME设置为头部时,

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

我可以在flask应用程序中的request. header中看到Script-Name: /my-app
然而,request.script_name是空的,所以所有的url_for(...)都无法正常工作。
P.S.:我试图在服务描述符中为gunicorn设置env变量,但在(访问)日志中它没有显示。无论如何,头解决方案似乎更合适,因为它将前缀保留在我将其装入服务器其余部分的位置。

ej83mcc0

ej83mcc01#

无论如何。我找到了我的问题和解决方案。
HTTP_NAME标头已被

proxy_set_header X-Forwarded-Prefix /;

它隐藏在proxy_params包含文件中。
删除这个前缀会导致gunicorn在flask中设置正确的header,flask的url_for()会按照预期的方式运行。

相关问题