You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Springfox Swagger HTML在Apache反向代理下无法正常工作求助

解决Apache反向代理Swagger UI无法访问的问题

我之前碰到过一模一样的问题,核心原因是你只代理了swagger-ui.html这单个页面,但Swagger UI实际上依赖一堆静态资源(JS、CSS、字体文件)和API文档接口,这些请求在反向代理后没有被正确转发,导致页面加载失败甚至完全无法运行。

下面是具体的解决步骤:

1. 修正Apache反向代理配置

不要只代理单个HTML文件,把Swagger需要的所有路径都配置反向代理。更新你的httpd.conf内容如下:

# 代理Swagger UI主页面
ProxyPass /myAppSwagger http://localhost:8081/swagger-ui.html
ProxyPassReverse /myAppSwagger http://localhost:8081/swagger-ui.html

# 代理Swagger资源描述、API文档和静态资源
ProxyPass /swagger-resources http://localhost:8081/swagger-resources
ProxyPassReverse /swagger-resources http://localhost:8081/swagger-resources

ProxyPass /v2/api-docs http://localhost:8081/v2/api-docs
ProxyPassReverse /v2/api-docs http://localhost:8081/v2/api-docs

ProxyPass /webjars http://localhost:8081/webjars
ProxyPassReverse /webjars http://localhost:8081/webjars

这些路径分别对应Swagger的资源清单、API文档接口以及第三方静态资源库,必须全部代理才能让Swagger UI正常加载和运行。

2. 优化Spring Boot的Swagger配置(可选但推荐)

为了让Swagger在反向代理场景下更适配,你可以在SwaggerConfig中添加资源映射配置,确保静态资源能被正确访问:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("你的控制器所在包路径"))
                .paths(PathSelectors.any())
                .build()
                .pathMapping("/"); // 确保根路径映射正确
    }

    // 配置Swagger静态资源的访问路径
    @Bean
    public WebMvcConfigurer swaggerResourceConfig() {
        return new WebMvcConfigurer() {
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                registry.addResourceHandler("swagger-ui.html")
                        .addResourceLocations("classpath:/META-INF/resources/");
                registry.addResourceHandler("/webjars/**")
                        .addResourceLocations("classpath:/META-INF/resources/webjars/");
            }
        };
    }
}

3. 重启服务并验证

修改完Apache配置后,一定要重启Apache服务才能生效:

# Linux系统下
sudo systemctl restart httpd

# Windows系统(管理员命令行)
httpd -k restart

之后访问http://你的Apache服务器地址/myAppSwagger,应该就能正常看到Swagger UI界面了。

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

火山引擎 最新活动