uwsgi+nginx部署flask-restx时Swagger UI无法加载如何配置nginx
问题原因
flask-restx默认会在根路径下挂载swagger-ui的静态资源、swagger.json接口描述文件,原有Nginx配置仅转发/api开头的请求到后端服务,swagger相关的资源请求未被转发到uwsgi,被Nginx直接返回404;同时缺少反向代理必要的头信息,导致后端生成的资源路径、接口地址不匹配,最终swagger-ui无法加载。
修复方案
分两步调整配置即可:
1. 修改Nginx配置
编辑/etc/nginx/sites-available/default,替换原有/api路径的转发规则,补充路径重写和代理头配置:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; location /api { # 去除请求的/api前缀后转发给后端,匹配后端原生路由 rewrite ^/api/(.*)$ /$1 break; include uwsgi_params; # 传递代理头,告知后端服务当前访问的前缀、域名、协议信息 uwsgi_param SCRIPT_NAME /api; uwsgi_param Host $host; uwsgi_param X-Real-IP $remote_addr; uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; uwsgi_param X-Forwarded-Proto $scheme; uwsgi_pass unix:/tmp/myproj.sock; } }
配置修改完成后执行以下命令校验并重载Nginx:
# 校验配置合法性 nginx -t # 校验通过后重载配置 systemctl reload nginx
2. 调整Flask应用配置
初始化flask-restx的Api实例时,显式配置接口前缀,避免生成的资源地址错误:
from flask import Flask from flask_restx import Api app = Flask(__name__) api = Api( app, version="1.0", title="项目API文档", # 所有业务接口的统一前缀 prefix="/api" ) # 后续正常注册你的接口命名空间即可
修改完成后重启uwsgi服务,让应用配置生效。
验证
配置生效后,访问http://你的服务器IP/api/doc(默认swagger文档路径)即可正常加载swagger-ui,所有接口调用路径也会自动带上/api前缀,和反向代理规则匹配。
内容的提问来源于stack exchange,提问作者Simk0024
相关产品推荐
相关产品推荐

