我已经使用 Flask-restx 实现了带有 swagger-ui 的 Flask Rest 服务器。 使用命令运行服务器时,我可以让 swagger-ui 工作,无需 nginx
flask run --host=0.0.0.0
或
uwsgi --ini app.ini
我的
app.ini
:
[uwsgi]
module = wsgi:app
master = true
processes = 2
socket = /tmp/myproj.sock
chmod-socket = 666
vacuum = true
die-on-term = true
====================
但是,使用 nginx,虽然我的 REST API 可以工作,但我无法获得 swagger-UI。 我在浏览器上收到的错误消息:
我的 nginx 配置在
/etc/nginx/sites-available/default
:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /api {
include uwsgi_params;
uwsgi_pass unix:/tmp/myproj.sock;
}
}
知道如何配置 nginx 以便加载 swagger-UI 吗? 谢谢你。
更新
我设法通过在 nginx 配置中添加 /swaggerui 来使其工作。
示例代码:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
include uwsgi_params;
uwsgi_pass unix:/tmp/myproj.sock;
}
location /swaggerui {
include uwsgi_params;
uwsgi_pass unix:/tmp/myproj.sock;
}
}
如果您将 flask-swagger-ui 模块与 Flask 一起使用。
这是适合我的 nginx 配置
# endpoint for showing swagger
location /api/docs {
proxy_pass http://localhost:5001/docs/;
}
# nginx was redirection so added once more location handler(It might be required in your cases)
location /docs {
proxy_pass http://localhost:5001/docs/;
}
# for getting the resource
location /static/swagger.yaml {
proxy_pass http://localhost:5001/static/swagger.yaml;
}