Django REST Swagger HTTPS 请求

6

如何配置django-rest-swagger以获取HTTPS请求?

更新: SSL证书已存在且所有应用程序都在使用它,但Swagger仍然发出HTTP请求。

5个回答

17

在您的settings.py中添加此设置。

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

如需更多详细信息,请参考 文档

此外,您可能需要确保服务器正在转发x_forwarded_proto,并在nginx中将以下内容添加到服务器配置的位置:

proxy_set_header  X-Forwarded-Protocol  $scheme;

1
its not help for me - Artem Ulko
你在nginx配置文件中添加了设置吗? - zaidfazil
当然,我在我的nginx配置中添加了设置。 - Artem Ulko
你能展示一下你添加的相关代码片段吗? - zaidfazil
有任何Apache特定的设置吗?我有一个“redirect permanent / https://localhost.my.org/”。 - Back2Basics

2
在urls中的get_schema_view函数中加入url='https://your_server_address/'。但是swagger现在只支持https,在需要同时支持http和https时,可以通过环境变量来解决。

0
所有上述解决方案对我都没有用,所以我做了一些可怕的事情,但它起作用了:

编辑drf_yasg/openapi.py第260行

从:

self.schemes = [url.scheme]

至:

self.schemes = ["https"]

显然你不应该这样做,因为下次有人安装要求时,这个更改将会丢失。但是这帮助我在我的服务器上使文档工作。


-1

@zaidfazil的答案对我几乎有用。 我不得不添加

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

我要添加到我的Django设置中

proxy_set_header X-Forwarded-Proto https;

改为:

proxy_set_header  X-Forwarded-Protocol  $scheme;

在为 Django 应用提供服务的 Nginx 的 location 块内部。


-4

这不是你的 Swagger 的问题。只需在你的 Django 服务器应用程序上安装 SSL 证书即可。


3
SSL证书已存在,所有应用程序都可以使用它,但Swagger会发出HTTP请求。 - Artem Ulko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接