3

我在8000端口使用 Nginx 运行 Django。这里 Nginx 暴露在 8000 端口之外。但在 Swagger UI 中,base_url设置为没有端口。所以 Swagger 试图在没有端口的情况下访问端点,然后它给出一个响应TypeError: Failed to fetch

请参考下图了解如何设置 base_url 在此处输入图像描述

请参考下图了解如何从 Swagger 发送请求 在此处输入图像描述

当我使用 Postman 访问端点(带端口)时,它工作正常。仅当我尝试使用 Swagger 时才会出现此问题(因为发送的请求没有端口)。

在这里,我希望 Swagger 使用端口发送所有请求。请帮我解决这个问题。谢谢。

笔记:

  1. 我正在使用drf-yasg==1.17.1包来生成Swagger UI
  2. 其他要求是Django==3.0.3djangorestframework==3.11.0
4

3 回答 3

4

您还需要告诉 Nginx 转发服务器端口。当 swager 从请求标头中获取基本 url 端口时(如果没有按照 mtshaikh 的建议进行硬编码)。

例如。像这样的东西应该在 Nginx 配置中

location / {
            proxy_set_header Host $host:$server_port;
    proxy_pass http://example.com:8000/;
}
于 2020-11-19T11:09:38.400 回答
1

不是一个好的解决方案,但在 urls.py中定义完整url的作品!get_schema_view()

schema_view = get_schema_view(
    openapi.Info( ... ),
    url='http://example.net:8080/', # Important bit
    public=True,
    permission_classes=(permissions.AllowAny,)
)

资源

于 2020-11-15T10:14:54.437 回答
0

谢谢,@Petr Synek 的回答

我们需要告诉 Nginx 转发http_host

location / {
     proxy_set_header Host $http_host;
}

这个解决了上述问题

于 2020-11-23T11:28:48.237 回答