Flask url_for在docker / docker-compose下没有编写正确的url

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

我有一个在一个群集下运行的Docker容器内运行的Flask应用程序。当我使用url_for为API创建外部URL时,它返回docker服务名称而不是绝对路径。

防爆。

endpoint = url_for('api_v1.get_me_the_data', sn=123, 
                _external=True, _scheme="https")

返回类似https://app-primary:8000/api/v1/devices/123的东西。

其他详情:

  • 在Nginx反向代理后面使用Gunicorn运行

我试过玩SERVER_NAME,但没有骰子。有没有一种简单的方法来解决这个问题?或者我应该为url_for写一个包装函数?

python docker flask docker-compose docker-swarm
1个回答
1
投票

因为你有一个容器内的python应用程序,也在Nginx后面,那么你可能需要使用ProxyFix,它会做两件事:

  • 通过阅读REMOTE_ADDR获取客户端IP而不是nginx容器IP
  • 通过读取HTTP_HOST来设置主机名

接下来,您需要确保nginx发送这些标头:

proxy_set_header Host            $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
© www.soinside.com 2019 - 2024. All rights reserved.