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

SpringDoc UI反向代理后显示应用端口异常问题求助

问题:反向代理下Swagger页面显示多余端口的解决方法

我使用SpringBoot 2.7.0搭配以下SpringDoc依赖:

<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-ui</artifactId>
  <version>1.6.9</version>
</dependency>

将SpringDoc配置为使用管理端口8081,应用本身运行在8080端口,相关配置如下:

server:
  forward-headers-strategy: FRAMEWORK
  error:
    include-message: always
    include-binding-errors: always
  port: 8080
management:
  server:
    port: 8081
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: prometheus,beans,openapi,swaggerui
springdoc:
  use-management-port: true
  swagger-ui:
    display-request-duration: true
    disable-swagger-default-url: true
  show-actuator: true

应用部署在Nginx反向代理之后,Nginx配置如下:

upstream app_api {
        server localhost:8080;
}

upstream app_actuator {
        server localhost:8081;
}

server {
    listen 80;
    server_name templates;

    add_header Cache-Control no-cache;
    
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Proto $scheme;

    location / {
        proxy_pass http://app_api;
    }

    location /actuator {
        proxy_pass http://app_actuator;
    }

}

但访问Swagger页面时,主机名后显示了应用端口,生成的curl命令中也包含该端口,而在反向代理环境下这一端口本不应被显示。


解决方案

问题核心是SpringDoc未正确识别反向代理传递的转发头信息,需要补充以下配置:

1. 给管理服务器添加转发头策略

由于Swagger UI挂载在管理端口(8081)上,需要让管理服务也处理Nginx传递的X-Forwarded-*头,否则会直接使用管理端口的原始地址:

management:
  server:
    port: 8081
    forward-headers-strategy: FRAMEWORK # 新增此配置
  # 原有配置保留

2. 配置SpringDoc基于转发头生成URL

在springdoc配置中添加服务器转发头策略,并指定Swagger UI加载API文档的代理后地址:

springdoc:
  use-management-port: true
  server:
    forward-headers-strategy: FRAMEWORK # 新增此配置
  swagger-ui:
    display-request-duration: true
    disable-swagger-default-url: true
    url: /actuator/openapi # 新增此配置,指定从代理后的地址加载API定义
  show-actuator: true

原理说明

启用forward-headers-strategy: FRAMEWORK后,Spring会根据Nginx传递的X-Forwarded-Host、X-Forwarded-Port、X-Forwarded-Proto头信息,生成对外暴露的正确URL,而非直接使用应用自身的端口。同时swagger-ui.url指定UI页面从代理后的/actuator/openapi地址加载API文档,避免直接访问管理端口的原始地址。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:33:47