解決swagger死循環的問題,/null/swagger-resources/configuration/ui

swagger在很長一段時間不訪問之後,再訪問會出現下面這個(猜測是session過期),如果不做任何處理,這個頁面會頻繁訪問:http://xxx.xxx.com/null/swagger-resources/configuration/ui,因爲是死循環,訪問量能把服務撐爆了。特別是前端開發人員第二天來上班的時候,並沒有打開swagger這頁面,它仍然會不停的訪問,一開始都很難定位到問題。

可以看到/null/swagger-resources/configuration/ui這個請求遠遠的高於其他請求,剩下/swagger-resources/**也是跟它相關的(我開始在代碼中做了重定向,後面發現沒用)。

之前在網上搜過這個問題的解決方案,有的人說是因爲資源找不到,重複請求,於是我重定向到指定資源,如下:

/**
     * 解決swagger死循環問題
     * 下面這幾個地址會一直輪詢,改爲重定向
     * /null/swagger-resources/configuration/ui
     * /null/swagger-resources/configuration/security
     * /null/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官方未來能解決這個問題,或者有人找到更好的解決方案的話,可以在下面評論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章