Flask Restplus Swagger не загружается за Nginx

У меня есть Flask API и пользовательский интерфейс Swagger, созданный с помощью Flask Restplus. API работает в контейнере Docker за контейнером Nginx, который обслуживает его по HTTP.

Вот конечная точка проверки работоспособности, которая подтверждает, что API работает: https://mobydq.net/mobydq/api/v1/health

{"message":"MobyDQ API running in production mode"}

Однако Swagger, который должен загружаться по следующему URL-адресу, не загружается вообще: https://mobydq.net/mobydq/api/doc

Вот конфигурация Nginx:

http {
    upstream api  {
      server api:5434;
    }

    upstream app {
      server app:3000;
    }

    # Server for https
    server {
      listen       443 ssl http2;
      server_name  mobydq.net;

      ssl_certificate      /etc/letsencrypt/live/mobydq.net/fullchain.pem;
      ssl_certificate_key  /etc/letsencrypt/live/mobydq.net/privkey.pem;

      # Location for MobyDQ Flask API
      location /mobydq {
        limit_req zone=default burst=20;
        proxy_pass http://api;
        proxy_redirect   off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
      }

      # Location for MobyDQ Web App
      location / {
        limit_req zone=default burst=20;
        proxy_pass http://app;
        proxy_redirect   off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
      }
    }

    # Default server to redirect http requests to https
    server {
      listen 80 default_server;
      server_name mobydq.net;
      listen [::]:80 default_server;

        location ~ /.well-known {
            root /var/www/letsencrypt;
        }
        location / {
            return 301 https://$host$request_uri;
        }
    }
}

Есть идеи, почему Swagger не загружается? Я просмотрел http-запросы, отправленные при загрузке страницы, но это не сильно помогло. Я вижу только загрузку значка:

введите описание изображения здесь

Я также посмотрел на консоль и увидел ошибку, но не могу сказать, что это значит:

введите описание изображения здесь


person Alexis.Rolland    schedule 08.12.2018    source источник
comment
Как вы установили swaggerUI?   -  person Ciasto piekarz    schedule 26.12.2018
comment
@Ciastopiekarz он генерируется автоматически из кода Flask благодаря пакету Python под названием Flask Restplus flask-restplus.readthedocs.io < / а>   -  person Alexis.Rolland    schedule 27.12.2018


Ответы (1)


Проблема заключалась в том, что Nginx неправильно перенаправлял HTTP-запросы при попытке получить ресурсы из Swagger (в частности, файл конфигурации JSON).

Проблема была устранена путем изменения конфигурации Nginx следующим образом:

[...]
  # Location for MobyDQ Flask API
  location ~ ^/(mobydq|swaggerui) {
    limit_req zone=default burst=20;
    proxy_pass http://api;
    proxy_redirect   off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
[...]
person Alexis.Rolland    schedule 27.12.2018