Flask服务带路径前缀部署时Swagger静态资源加载失败问题
Flask-RESTX部署到AWS反向代理后Swagger静态资源加载异常问题
问题背景
我使用flask与flask_restx(flask-restplus的社区分叉项目)搭建简易接口服务,服务最终将部署在AWS平台,计划通过框架自动生成的Swagger文档页方便其他人员快速测试接口。
初始实现代码如下:
from flask import Flask from flask_restx import Api from my_service import service_namespace app = Flask(__name__) api = Api(app, version='1.0') api.add_namespace(service_namespace) if __name__ == '__main__': app.run(debug=True)
本地测试访问localhost:5000时,Swagger文档加载、接口调试功能均完全正常。但将服务部署到AWS后,由于服务通过域名二级路径反向代理转发(例如my-company.com/chris-service指向后端运行的容器实例),Swagger文档页无法加载CSS等必需静态资源,页面显示异常,异常截图如下:
已尝试的排查方案
我先后查阅了Flask框架下Swagger报404错误的多个公开技术方案,覆盖Flasgger 404、Swagger文档生成错误、Flask通用路由404等相关场景,还尝试通过添加Blueprint修改配置(暂未完全掌握Blueprint的运行机制),尝试的配置代码如下:
app = Flask(__name__) blueprint = Blueprint("api", __name__, root_path="/chris-service", # url_prefix="/chris-service", # 该参数配置后无效 ) api = Api(blueprint) app.register_blueprint(blueprint) ...
上述配置尝试后问题仍未解决。
问题补充排查细节
结合进一步排查,确认问题细节如下(示例地址为模拟地址,技术场景与实际完全一致):
- Swagger文档的访问入口为
my-company.com/chris,使用HTTP或HTTPS协议访问时问题复现情况一致 - 访问上述入口时,页面自动请求的静态资源地址为
my-company.com/swaggerui/swagger-ui.css - 实际上静态资源可通过
my-company.com/chris/swaggerui/swagger-ui.css正常访问 - 曾尝试通过修改
root_path参数调整资源根路径(即上述Blueprint配置中的尝试),但配置未生效,也不确定该参数是否为解决问题的正确配置项。
我已耗时一周排查该问题仍未找到可行解决方案,恳请各位提供解决思路。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

