如果我尝试使用Flask RestPlus通过HTTPS提供Swagger UI,我在根URL处只看到“No spec provided”错误消息,并且完全的Swagger UI不会加载。但是,如果我访问API端点,它们会按预期返回响应。
查看错误页面的源代码HTML,我注意到swagger.json
是从http://myhost/
而不是https://myhost/
获取的
我在the restplus Github issues上发现了完全相同的问题
我已经用那个页面上提到的monkey-patch暂时修复了我的问题。Swagger UI加载了,查看HTML源代码,我发现swagger.json
确实是从https://myhost
中提取的。
为什么会发生这种情况,我怎么能在没有猴子补丁的情况下修复它?
HTTPS是由Cloudflare的“灵活”HTTPS服务提供的。
我的应用程序是Nginx背后的配置,因此,并没有造成任何问题,据我所知:
...
http {
...
server {
location / {
charset UTF-8;
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
charset UTF-8;
proxy_intercept_errors on;
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;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5000;
}
}
}
4条答案
按热度按时间wlsrxk511#
我已经使用下面的工作。你可以在下面的链接查看稳定的例子。
http://flask-restplus.readthedocs.io/en/stable/example.html
mpbci0fu2#
我不确定这是完全安全的,但这里是我如何在Nginx修复它:
我在Nginx上卸载SSL,这对我来说没有任何问题。它还消除了对猴子补丁应用程序代码的需要。
您在flak-restplus问题中列出的方法绝对被认为是不安全的:
fruv7luv3#
我有这个问题。
当我查看“未提供规范”错误页面的源代码时,我可以在底部看到以下内容:
注意,uri是**http://127.0.0.1:5000**,这表示主机名和协议没有传递到服务器(在我的例子中是Gnuicorn)。
为了解决这个问题,我在我的ngnix配置中添加了以下内容:
请注意,我必须将其添加到
ssl
服务器块中。当我第一次尝试时,我将其放在非SSL部分,它没有任何区别。cgyqldqp4#
将该行添加到索引中