swagger在很长一段时间不访问之后,再访问会出现下面这个(猜测是session过期),如果不做任何处理,这个页面会频繁访问:http://xxx.xxx.com/null/swagger-resources/configuration/ui,因为是死循环,访问量能把服务撑爆了。特别是前端开发人员第二天来上班的时候,并没有打开swagger这页面,它仍然会不停的访问,一开始都很难定位到问题。
可以看到/null/swagger-resources/configuration/ui这个请求远远的高于其他请求,剩下/swagger-resources @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addRedirectViewController("/null/api-docs", "/api-docs").setKeepQueryParams(true); registry.addRedirectViewController("/null/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui"); registry.addRedirectViewController("/null/swagger-resources/configuration/security", "/swagger-resources/configuration/security"); registry.addRedirectViewController("/null/swagger-resources", "/swagger-resources"); }
然而并没有什么用,仍然还是不断请求。网上还有说是swagger版本问题,需要spring-swagger和spring-swagger-ui版本一致,我检查了也是一致的。
最后想到一个简单粗暴的解决方案,因为/null/swagger-resources/configuration/ui明显不是一个正常的请求,我可以在请求经过nginx的时候就过滤掉。
解决方案:
location ^~ /null/ {
deny all;
}
完整配置:
server{
listen 80;
server_name xxx.xxx.com;
# 加上这句即可,把/null的请求全部拒绝掉
location ^~ /null/ {
deny all;
}
location / {
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_pass http://api-server/;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
不过还是希望swagger官方未来能解决这个问题,或者有人找到更好的解决方案的话,可以在下面评论。