You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Nginx后Swagger请求URL缺失端口82的问题求助

解决Nginx反向代理后drf_yasg Swagger请求端口缺失问题

问题分析

核心问题是Nginx反向代理时没把端口信息传给Django服务,导致drf_yasg生成的Swagger请求URL丢了82端口;另外你之前尝试的API_URL并不是drf_yasg控制请求地址的正确配置项。

解决方案

1. 修正Nginx的Host头配置

当前Nginx的proxy_set_header Host $host;只传了主机名,没带端口。修改为:

location /api/v1/swagger/ {
        proxy_pass http://127.0.0.1:8000/swagger/;
        # 传递完整的主机+端口信息
        proxy_set_header Host $host:$server_port;
        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;
    }

如果Nginx是通过listen 82;监听端口,$server_port会自动获取82,确保Django能拿到正确的请求端口。

2. 配置Django信任反向代理头部

在Django的settings.py里加以下配置,让Django识别反向代理传递的头部信息:

# 信任反向代理的Host头
USE_X_FORWARDED_HOST = True
# 若用https协议需配置下面一行,http则不需要
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

3. 正确配置drf_yasg的服务器地址

在settings.py的SWAGGER_SETTINGS中添加SERVERS配置,明确指定Swagger使用的服务器地址:

SWAGGER_SETTINGS = {
    # 保留你原有的其他配置
    'SERVERS': [
        {
            'url': 'http://127.0.0.1:82/api/v1/',
            'description': '本地开发服务器'
        }
    ],
    # 删掉之前无效的API_URL配置
}

SERVERS是OpenAPI规范定义的服务器地址配置项,drf_yasg会依据这个生成正确的请求URL。

4. 重启服务

  • 重启Nginx:sudo systemctl restart nginx
  • 重启Django服务(比如Gunicorn/Uwsgi):sudo systemctl restart 你的Django服务名

做完这些步骤后,Swagger UI发送的请求应该会自动带上82端口,指向正确的http://127.0.0.1:82/api/v1/albums/地址。

内容的提问来源于stack exchange,提问作者Kae K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:42:08