问题描述
我正在Nstrongx的 8000 端口上运行Django。 Nginx在这里暴露在8000端口的外部。但是在Swagger UI中, base_url 设置为不带端口。因此Swagger尝试访问没有端口的端点,然后给出 TypeError:无法提取的响应。
当我使用Postman访问端点(带有端口)时,它工作正常。仅当我尝试使用Swagger时才会出现此问题(因为发送的请求没有端口)。
在这里,我希望Swagger使用端口发送所有请求。请帮助我解决此问题。谢谢。
注意:
- 我正在使用 drf-yasg == 1.17.1 包来生成 Swagger UI
- 其他要求是 Django == 3.0.3 和 djangorestframework == 3.11.0
解决方法
这不是一个好的解决方案,但是可以在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,)
)
,
您还需要告诉Nginx转发服务器端口。当swager从请求标头获取基本url端口时(如果未按照建议的mtshaikh进行硬编码)。
例如像这样的东西应该在Nginx配置中
location / {
proxy_set_header Host $host:$server_port;
proxy_pass http://example.com:8000/;
}
,
谢谢@Petr Synek的回答和线索。
我们需要告诉Nginx转发 http_host 。
location / {
proxy_set_header Host $http_host;
}
这解决了上述问题