我正在尝试使用路径上下文(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变量,但在(访问)日志中它没有显示。无论如何,头解决方案似乎更合适,因为它将前缀保留在我将其装入服务器其余部分的位置。
1条答案
按热度按时间ej83mcc01#
无论如何。我找到了我的问题和解决方案。
HTTP_NAME标头已被
它隐藏在
proxy_params
包含文件中。删除这个前缀会导致gunicorn在flask中设置正确的header,flask的url_for()会按照预期的方式运行。