使用uwsgi和nginx在部署中显示flask-restx的Swagger UI时出错

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

我已经使用 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。 我在浏览器上收到的错误消息:

enter image description here

我的 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 flask swagger uwsgi flask-restx
2个回答
1
投票

更新

我设法通过在 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;
  }

}

0
投票

如果您将 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;
    }

假设您将 swagger 文件保存在项目根目录的静态目录中。 project structure

© www.soinside.com 2019 - 2024. All rights reserved.