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
相关产品推荐
相关产品推荐

