Flask Restplus Swagger не загружается за Nginx - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть Flask API и Swagger UI, сгенерированный с помощью 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 запросы, отправленные при загрузке страницы, но это мало помоглоЯ вижу только загрузку избранного:

enter image description here

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

enter image description here

1 Ответ

0 голосов
/ 27 декабря 2018

Проблема заключалась в том, что 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;
  }
[...]
...